我正在配置我的Spring MVC 3.1.1应用程序,如下所述.记录显示在'MyInterceptor.preHandle'之前调用'MyArgumentResolver.resolveArgument'.当在旧时配置中使用它们(使用明确定义的AnnotationMethodHandlerAdapter bean等)时,它们被调用,反之亦然.我读到<mvc:annotation-driven>在某种程度上是关键的,因为它的配置不能补充mvc:namespace的其他设置.我面临同样的问题吗?
<mvc:annotation-driven>
<mvc:message-converters>
...
</mvc:message-converters>
<mvc:argument-resolvers>
<bean class="[...].MyArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/home/**" />
<bean class="[...].MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
Run Code Online (Sandbox Code Playgroud)
非常感谢!
带有<mvc:annotation-driven>的Spring 3.1使用一组不同的类来处理请求 - 例如,AnnotationMethodHandlerAdapter被RequestMappingHandlerAdapter替换.你可以在这里阅读更多相关内容:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-31-vs-30
为了正确使用这些类,他们添加了一个新的HandlerMethodArgumentResolver,它取代了旧的WebArgumentResolver接口.但是,我相信Spring会自动尝试通过将它们包装在AbstractWebArgumentResolverHandlerAdapter中来"升级"旧的WebArgumentResolvers ,这是我在升级过程中看到的行为.AbstractWebArgumentResolverHandlerAdapter的JavaDoc说:
注意:此类是为了向后兼容而提供的.但是,建议将WebArgumentResolver重写为HandlerMethodArgumentResolver.由于supportsParameter(org.springframework.core.MethodParameter)只能通过实际解析值来实现,然后检查结果不是WebArgumentResolver#UNRESOLVED ...
单步执行代码后,我认为在您的情况下可能发生的事情是新类在拦截器中执行preHandle之前调用supportsParameter函数,但AbstractWebArgumentResolverHandlerAdapter的实现实际调用resolveArgument方法并检查'UNRESOLVED'为返回类型,以确定参数解析器是否支持给定的参数,这将使它们的外观不按顺序调用.
我怀疑如果你重写你的参数解析器来实现新的HandlerMethodArgumentResolver接口,它将解决你的问题.
| 归档时间: |
|
| 查看次数: |
5644 次 |
| 最近记录: |