正如标题所示,我正在尝试并且未能在Spring 3.0中使用以下组合:
所有作品都有效 - 除非放在一起!
更详细地说,我有一个现有的Spring网络应用程序,其中包含许多Spring-3.0之前的控制器。这些实现Controller并使用SimpleUrlHandlerMapping bean显式映射。 (因此,一种解决方案是将它们全部更改为@Controller样式)。同一个web-app(DispatcherServlet)也支持几个用@Controller注释的新控制器。
我的bean配置包含以下内容,一切都很好:
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/path/name.ext">mySpring25Controller</prop>
</props>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
</bean>
现在我正在添加一个使用@Controller和@RequestMapping注释的新控制器,使用MappingJacksonHttpMessageConverter,以便使用@ResponseBody我的一些方法可以通过Jackson返回JSON到Ajax调用。一切都很好:
<!-- to generate JSON responses using Jackson (without using <mvc:annotation-driven/>) -->
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter"/>
</list>
</property>
</bean>
问题是现在我在SimpleUrlHandlerMapping bean中定义的显式映射不再有效:
[http-8081-Processor25] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/mayapp].[springapp] - Servlet.service() for servlet springapp threw exception
javax.servlet.ServletException: No adapter for handler [com.mycom.controller.mySpring25Controller ...]: Does your handler implement a supported interface like Controller?
at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:985)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:773)
这些映射在启动时仍然出现在我的日志中(SimpleUrlHandlerMapping - 映射的URL路径......等) - 但显然现在已经以某种方式被破坏了。
INFO org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/path/name.ext] onto handler [com.mycom.controller.mySpring25Controller ....]
我从<mvc:annotation-driven/>
开始遇到同样的问题。我尝试过重新订购但没有成功,包括订单属性。我也没有在Spring文档中找到解释。似乎在Spring自动魔术中存在一些相互作用,我没有深入到底。 p>
有趣的问题是谁?洞察得很感激!
答案 0 :(得分:2)
发帖,你们会发现(由于缺乏声誉而延迟了8个小时)!
根据帖子No adapter for handler exception,答案似乎是显式的AnnotationMethodHandlerAdapter定义消除了之前满足SimpleUrlHandlerMapping映射的隐式SimpleControllerHandlerAdapter。
所以明确添加:
<bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
</bean>
我们很好,但与此同时你可能还需要引入隐式HttpRequestHandlerAdapter的明确替代品也被吹走了:
<bean
class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter">
</bean>