HandlerMethodArgumentResolver实现自定义注解,HandlerMethodArgumentResolver也注入WebMvcConfigurer,可注解未生效
时间: 2024-01-10 14:19:41 浏览: 34
根据提供的引用内容,可以得出以下结论:
当我们方法中有引入@RequestBody时,会使用RequestResponseBodyMethodProcessor处理器,而不是我们自定义的HandlerMethodArgumentResolver。因此,如果我们想要使用自定义的HandlerMethodArgumentResolver处理器,需要在方法中去掉@RequestBody注解。
另外,HandlerMethodArgumentResolverComposite会添加一些默认的HandlerMethodArgumentResolver,而我们自定义的HandlerMethodArgumentResolver是放在默认的HandlerMethodArgumentResolver之后。因此,如果我们想要使用自定义的HandlerMethodArgumentResolver处理器,需要将其放在默认的HandlerMethodArgumentResolver之前。
以下是一个实现自定义注解的HandlerMethodArgumentResolver的示例代码:
```java
public class CustomArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterAnnotation(CustomAnnotation.class) ! null;
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
// 处理自定义注解的逻辑
return null;
}
}
```
然后,在WebMvcConfigurer中注册自定义的HandlerMethodArgumentResolver:
```java
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(0, new CustomArgumentResolver());
}
}
```
注意,这里将自定义的HandlerMethodArgumentResolver放在了默认的HandlerMethodArgumentResolver之前,以确保其生效。