springboot 请求前自动给 参数的某个属性赋值
springboot 请求前自动给 参数的某个属性赋值
在Spring Boot中,可以通过自定义HandlerMethodArgumentResolver
来在请求处理方法前自动给参数的某个属性赋值。以下是一个简单的例子:
-
创建一个自定义注解来标记需要自动赋值的参数:
public
String value();
}
-
实现
HandlerMethodArgumentResolver
来处理带有@AutoFill
注解的参数:
public class AutoFillHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(AutoFill.class);
}
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
:
public class WebConfig implements WebMvcConfigurer {
private AutoFillHandlerMethodArgumentResolver autoFillHandlerMethodArgumentResolver;
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(autoFillHandlerMethodArgumentResolver);
}
}
-
使用自定义注解:
public class MyModel {
private String myField;
// getters and setters
}
public class MyController {
public ResponseEntity<MyModel> test(
return ResponseEntity.ok(model);
}
}
在上述例子中,当/test
路径被请求时,MyModel
中标记有@AutoFill
注解的myField
属性将自动被赋值为"自动赋值的值"
。这个例子展示了如何在Spring Boot中实现请求处理方法前的参数自动赋值。