【发布时间】:2011-09-02 15:21:48
【问题描述】:
正如标题所示,我正在尝试让以下组合在 Spring 3.0 中工作但未能成功:
- 使用 SimpleUrlHandlerMapping 映射的 Pre-Spring-3.0 控制器,以及,
- 一个 Spring-3.0 @Controller 使用 MappingJacksonHttpMessageConverter 和 @ResponseBody 返回 JSON。
所有部件都可以工作 - 除非放在一起!
更详细地说,我有一个现有的 Spring web 应用程序,其中包括许多 pre-Spring-3.0 控制器。这些实现 Controller 并使用 SimpleUrlHandlerMapping bean 显式映射。 (因此一种解决方案是将它们全部更改为 @Controller 样式)。同一个 Web 应用程序 (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自动魔法中似乎有一些我没有深入了解的交互。
有趣的问题有人吗?非常感谢您的见解!
【问题讨论】:
标签: spring-mvc jackson