springboot 请求前自动给 参数的某个属性赋值


 
springboot 请求前自动给 参数的某个属性赋值

在Spring Boot中,可以通过自定义HandlerMethodArgumentResolver来在请求处理方法前自动给参数的某个属性赋值。以下是一个简单的例子:

  1. 创建一个自定义注解来标记需要自动赋值的参数:

 
 
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {
String value();
}
  1. 实现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;
}
}
  1. 在Spring Boot配置中注册自定义的HandlerMethodArgumentResolver

 
 
@Configuration
public class WebConfig implements WebMvcConfigurer {
 
@Autowired
private AutoFillHandlerMethodArgumentResolver autoFillHandlerMethodArgumentResolver;
 
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(autoFillHandlerMethodArgumentResolver);
}
}
  1. 使用自定义注解:

 
 
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中实现请求处理方法前的参数自动赋值。

posted on 2024-05-21 14:58  四海骄阳  阅读(130)  评论(0编辑  收藏  举报

导航