用RequestMappingHandlerAdapter问题替换AnnotationMethodHandlerAdapter问题
问题内容:
我最近升级到3.2spring,并注意到它AnnotationMethodHandlerAdapter
已被赞成弃用RequestMappingHandlerAdapter
。因此,我重新配置为使用新类,并带有所需的自定义MessageConverter
。一切都很好。
但是,当尝试访问带注释的URL时Controller
,出现错误:
[java] javax.servlet.ServletException: No adapter for handler [my.company.TagController@1c2e7808]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler
[java] at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:1128)
[java] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:903)
[java] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
在调试调度程序(尤其是Dispatcher.getHandlerAdapter()
方法)时,它会找到my
HandlerAdapter
,但是AbstractHandlerMethodAdapter.supports()
被调用的则需要一个MethodHandler
:
public final boolean supports(Object handler) {
return handler instanceof HandlerMethod && supportsInternal((HandlerMethod) handler);
}
并且控制器不是HandlerMethod
。该AnnotatedMethodHandlerAdapter
的支持方法..好,不同的(作品仍然!)
public boolean supports(Object handler) {
return getMethodResolver(handler).hasHandlerMethods();
}
因此,我显然不能简单地升级到新类……我缺少一些额外的配置,但是文档并没有真正帮助我。有任何想法吗?
谢谢。
问题答案:
<mvc:annotation-driven/>
在spring配置文件中使用“ ”,而不是编写自己的WebMvcConfigurationSupport实现
例
<mvc:annotation-driven/>
<context:component-scan base-package="com.springapp.mvc"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
</list>
</property>
</bean>