用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>