是否可以使用不同的方法将相同的映射映射到两个不同的控制器?

时间:2013-01-25 19:07:31

标签: java spring-mvc

我的应用程序中有两个方法使用不同(http)方法的相同请求映射

@RequestMapping(value = "/method/{key}", method = RequestMethod.GET)
public void method1(<parameters>) throws IOException {
    // ...
}

@RequestMapping(value = "/method/{key}", method = RequestMethod.PUT)
public void method2(<parameters>) throws IOException {
    // ...
}

只要两个方法都在同一个控制器中定义,这就完美无缺,但是,由于我使用的公司框架,我需要它们在2个不同的控制器中,当我启动我的应用程序时,我收到以下错误:

  

引起:java.lang.IllegalStateException:无法映射处理程序&#39; MyController#0&#39;到URL路径[/ method / {key}]:已经映射了[class OtherController $$ EnhancerByCGLIB $$ 54a955d]类型的处理程序。   在org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.registerHandler(AbstractUrlHandlerMapping.java:390)       在org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.registerHandler(AbstractUrlHandlerMapping.java:362)       在org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping.detectHandlers(AbstractDetectingUrlHandlerMapping.java:82)       在org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping.initApplicationContext(AbstractDetectingUrlHandlerMapping.java:58)       at org.springframework.context.support.ApplicationObjectSupport.initApplicationContext(ApplicationObjectSupport.java:119)       at org.springframework.web.context.support.WebApplicationObjectSupport.initApplicationContext(WebApplicationObjectSupport.java:72)       at org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(ApplicationObjectSupport.java:73)       在org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:109)       at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:88)       在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:393)       在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1415)       在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:518)       ......还有25个

是否可以在不同的控制器中定义它们,还是应该查看一些(可怕的)解决方法(比如重命名其中一个URL)?

1 个答案:

答案 0 :(得分:3)

它应该可以正常工作,因为Spring 3.1(如果启用了新的映射实现 - 如果使用<mvc:annotation-driven>@EnableWebMvc则默认启用它,并且不要手动声明任何HandlerMapping

在旧版本的Spring中,您必须将这些方法放在同一个控制器中。