是的你可以。
Spring 使用HandlerMethodArgumentResolver
(您可以在 javadoc 区域中查看默认的All Known Implementing Classes
)接口来决定将什么传递给您的控制器方法。
您可以创建和注册自己HandlerMethodArgumentResolver
的注释以查找注释。
public class MyHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterAnnotation(MyAnnotation.class) != null;
}
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
// do something about it
}
}
Spring 遍历一个List<HandlerMethodArgumentResolver>
已注册的解析器(一些默认的,一些自定义注册的),调用supportsParameter()
. 它使用它找到的第一个支持相关参数的参数。
要注册编程配置,您可以扩展WebMvcConfigurationSupport
和覆盖其方法
@Configuration
public class DispatcherContext extends WebMvcConfigurationSupport {
@Override
protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new MyHandlerMethodArgumentResolver());
}
}
附带说明一下,您可以对处理程序方法的返回值执行相同的操作HandlerMethodReturnValueHandler
。