2

私のアプリケーションには、異なる (http) メソッドで同じリクエスト マッピングを使用する 2 つのメソッドがあります。

@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) at org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping.initApplicationContext(AbstractDetectingUrlHandlerMapping.java:58) at org.springframework.context.support.ApplicationObjectSupport.

それらを異なるコントローラーで定義することはまったく可能ですか、それとも (URL の 1 つの名前を変更するなどの) いくつかの (恐ろしい) 回避策を検討する必要がありますか?

4

1 に答える 1

3

Spring 3.1 以降は正常に動作するはずです (新しいマッピング実装が有効になっている場合 -<mvc:annotation-driven>または@EnableWebMvcを手動で宣言しない場合、デフォルトで有効になりますHandlerMapping)。

Spring の古いバージョンでは、これらのメソッドを同じコントローラーに配置する必要があります。

于 2013-01-25T19:15:05.400 に答える