HandlerMethodArgumentResolver加自定义注解的方式修改一个对象里面的参数
时间: 2024-01-10 08:51:53 浏览: 27
HandlerMethodArgumentResolver是一个接口,用于解析Controller方法的参数。我们可以实现这个接口并加上自定义注解的方式来修改一个对象里面的参数。下面是一个示例:
1. 创建一个自定义注解
```java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface ModifyParam {
}
```
2. 创建一个实现HandlerMethodArgumentResolver接口的类
```java
@Component
public class ModifyParamResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return methodParameter.hasParameterAnnotation(ModifyParam.class);
}
@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer,
NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
// 获取Controller方法的参数对象
Object arg = modelAndViewContainer.getAttribute(methodParameter.getParameterName());
// 如果参数对象是一个Map类型,则修改其中的参数
if (arg instanceof Map) {
Map<String, Object> paramMap = (Map<String, Object>) arg;
paramMap.put("param1", "new value");
}
return arg;
}
}
```
3. 在Controller方法的参数上添加自定义注解
```java
@PostMapping("/modify")
public void modify(@ModifyParam @RequestBody Map<String, Object> paramMap) {
// ...
}
```
当我们调用这个Controller方法时,ModifyParamResolver会被调用,并且会将Map参数对象中key为"param1"的值修改为"new value"。