【问题标题】:Is it possible to map the same mapping with different methods to two different controllers?是否可以使用不同的方法将相同的映射映射到两个不同的控制器?
【发布时间】:2013-01-25 19:07:31
【问题描述】:

我的应用程序中有两个方法使用相同的请求映射和不同的 (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:无法将处理程序“MyController#0”映射到 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) 在 org.springframework.context.support.ApplicationObjectSupport.initApplicationContext(ApplicationObjectSupport.java:119) 在 org.springframework.web.context.support.WebApplicationObjectSupport.initApplicationContext(WebApplicationObjectSupport.java:72) 在 org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(ApplicationObjectSupport.java:73) 在 org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:109) 在 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)?

【问题讨论】:

    标签: java spring-mvc


    【解决方案1】:

    从 Spring 3.1 开始它应该可以正常工作(如果启用了新的映射实现 - 如果使用 &lt;mvc:annotation-driven&gt;@EnableWebMvc 并且不手动声明任何 HandlerMappings,则默认启用它)。

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

    【讨论】:

    • 修改迫使我在我们的框架中使用 2 个不同控制器的部分比将使用 MVC 的所有内容迁移到新版本更容易。谢谢!
    • 小心,它是注解驱动的,不是驱动的。由于它只有一封信,我无法对其进行编辑。
    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多