我正在将一个大型Spring 3.0应用程序移植到Spring 3.2(是的,我知道)。该应用程序结合了XML和注释配置来定义路由,例如:
servlet.xml中:
<context:annotation-config/>
<context:component-scan base-package="foo.bar" />
...
<mvc:annotation-driven />
...
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
...
<property name="mappings">
<props>
<prop key="/booking/default.htm">booking.default</prop>
...
</props>
</property>
...
</bean>
<bean id="booking.default" class="foo.bar.BookingController">
...
</bean>
BookingController.java
@Controller
public class BookingController {
...
@RequestMapping(method = RequestMethod.GET)
public String handleRequest(...)
...
}
在Spring 3.0中,效果是将GET /booking/default.htm映射到BookingController的handleRequest方法,但是我无法在Spring 3.2中重新创建此行为。
Spring 3.2似乎忽略了XML,并将使用@RequestMapping(method = RequestMethod.GET)
注释的每个方法视为相同,并在启动时使用java.lang.IllegalStateException: Ambiguous mapping found.
这种方式配置了大量方法。其中一些在基础库类中有@RequestMapping,我无法改变。
我可以通过将url路径从XML配置移动到注释来解决它,但我想避免(由于各种原因)并复制Spring 3.0行为。
这可能吗?寻找答案并未成功。
答案 0 :(得分:0)
更新:
TL; DR:从Spring 3.1开始,这是不可能的
阅读SO&#34;相关问题&#34;链接: SpringMVC 3.0 to 3.1 migration of ControllerClassNameHandlerMapping
带我到: http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html
其中包含摘录:
Spring MVC 3.1中@RequestMapping方法的新支持类
...
还有一些事情不再可能:
首先使用SimpleUrlHandlerMapping或选择控制器 BeanNameUrlHandlerMapping然后缩小基于的方法 @RequestMapping注释。
这解释了我的问题。