2

我的应用程序中有两种方法使用相同的请求映射和不同的(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。

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

4

1 回答 1

3

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

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

于 2013-01-25T19:15:05.400 回答