Spring MVC结合了XML和annotation Controller配置

时间:2017-01-23 10:43:35

标签: java spring spring-mvc

我正在将一个大型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行为。

这可能吗?寻找答案并未成功。

1 个答案:

答案 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注释。

这解释了我的问题。