【发布时间】:2013-06-30 12:51:03
【问题描述】:
我最近升级到 spring 3.2 并注意到 AnnotationMethodHandlerAdapter 已被弃用,取而代之的是 RequestMappingHandlerAdapter。所以我重新配置以使用新类,并配有我需要的自定义MessageConverter。一切都很好。
但是,当我尝试访问带注释的 Controller 支持的 URL 时,出现错误:
[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() 方法,它会找到我的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();
}
所以我显然不能简单地升级到新类...我缺少一些额外的配置,但文档并没有真正帮助我。有什么想法吗?
谢谢。
【问题讨论】:
标签: spring-mvc