标签:springboot class AutoFill 自动 赋值 parameter public 属性
springboot 请求前自动给 参数的某个属性赋值
在Spring Boot中,可以通过自定义HandlerMethodArgumentResolver
来在请求处理方法前自动给参数的某个属性赋值。以下是一个简单的例子:
-
创建一个自定义注解来标记需要自动赋值的参数:
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {
String value();
}
-
实现HandlerMethodArgumentResolver
来处理带有@AutoFill
注解的参数:
@Component
public class AutoFillHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(AutoFill.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
AutoFill autoFill = parameter.getParameterAnnotation(AutoFill.class);
String fieldName = autoFill.value();
// 获取原始对象,并给对应字段赋值
Object bean = BeanUtils.instantiateClass(parameter.getParameterType());
BeanWrapper beanWrapper = new BeanWrapperImpl(bean);
beanWrapper.setPropertyValue(fieldName, "自动赋值的值");
return bean;
}
}
-
在Spring Boot配置中注册自定义的HandlerMethodArgumentResolver
:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private AutoFillHandlerMethodArgumentResolver autoFillHandlerMethodArgumentResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(autoFillHandlerMethodArgumentResolver);
}
}
-
使用自定义注解:
public class MyModel {
@AutoFill("myField")
private String myField;
// getters and setters
}
@RestController
public class MyController {
@GetMapping("/test")
public ResponseEntity<MyModel> test(@Valid MyModel model) {
return ResponseEntity.ok(model);
}
}
在上述例子中,当/test
路径被请求时,MyModel
中标记有@AutoFill
注解的myField
属性将自动被赋值为"自动赋值的值"
。这个例子展示了如何在Spring Boot中实现请求处理方法前的参数自动赋值。
标签:springboot,
class,
AutoFill,
自动,
赋值,
parameter,
public,
属性
From: https://www.cnblogs.com/zhoading/p/18204063