假设我在我的方法中有以下方法Controller:
@RequestMapping(method = {RequestMethod.GET}, value = "")
@ResponseBody
public Object getObject(@MyAnnotation String value) {
log.debug(value) //value is populated
...
}
Run Code Online (Sandbox Code Playgroud)
我如何将请求中的内容绑定到此注释值?Spring是否为绑定过程提供了任何钩子?如果有人能指出我正确的方向,那将会很棒.
谢谢!
是的你可以.
Spring使用HandlerMethodArgumentResolver(您可以All Known Implementing Classes在javadoc区域中看到默认值)接口来决定传递给控制器方法的内容.
您可以创建并注册自己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
}
}
Run Code Online (Sandbox Code Playgroud)
Spring通过一个List<HandlerMethodArgumentResolver>已注册的解析器(一些默认,一些自定义注册)进行迭代,调用supportsParameter().它使用它找到的第一个支持有问题的参数.
要注册程序化配置,您可以扩展WebMvcConfigurationSupport和覆盖其方法
@Configuration
public class DispatcherContext extends WebMvcConfigurationSupport {
@Override
protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new MyHandlerMethodArgumentResolver());
}
}
Run Code Online (Sandbox Code Playgroud)
在旁注中,您可以对处理程序方法返回值执行相同的操作HandlerMethodReturnValueHandler.
| 归档时间: |
|
| 查看次数: |
1438 次 |
| 最近记录: |