2017-01-23 62 views
0

我将一个大的Spring 3.0应用程序移植到Spring 3.2(是的,我知道)。应用结合了XML和注释配置以定义途径,例如:Spring MVC组合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中重新创建此行为。

春季3.2,看来,忽略了XML和意见与@RequestMapping(method = RequestMethod.GET)一样注释每一个方法,用java.lang.IllegalStateException: Ambiguous mapping found.

中止在启动时有大量这样配置的方法。其中一些在基础库类中有@RequestMapping,我无法更改。

我可以通过将URL路径从XML配置移动到注释来解决它,但我想避免(由于各种原因)并复制Spring 3.0行为。

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

回答

0

UPDATE:

TL; DR:这是不可能的,从春季3.1起

读一所以 “相关的问题” 链接: 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注释缩小方法。

这解释了我的问题。

相关问题