4

Spring MVC 3アプリケーションに2つのリクエストマッピングがあります。1つはとを受け取り、jsonもう1つはデータxmlを受け取りapplication/x-www-form-urlencodedます。例:

@RequestMapping(value={"/v1/foos"}, method = RequestMethod.POST, consumes={"application/json", "application/xml"})
public FooDTO createFoo(@RequestBody FooDTO requestDTO) throws Exception {
    ...
}

@RequestMapping(value={"/v1/foos"}, method = RequestMethod.POST, consumes="application/x-www-form-urlencoded")
public FooDTO createFooWithForm(@ModelAttribute FooDTO requestDTO) throws Exception {
    ...
}

consumesを取得しますが、パラメーターが異なると各リクエストが一意になると予想しましたjava.lang.IllegalStateException: Ambiguous handler methods mapped...

リクエストを一意にする必要がconsumesありますか?produces何か案は?

編集1:これに重みを加えるために、content-typeを使用するのではなくヘッダーにを設定するconsumesと、これは実際に機能し、一意になりますheaders="content-type=application/x-www-form-urlencoded。おそらくバグがありconsumesますか?

編集2: Spring3.1.1.RELEASEを使用しています。

4

1 に答える 1

2

これは、SpringForumのMartenDeinumによって解決されました(ここ):

HandlerMappingとHandlerAdapterの両方を変更する必要があります(RequestMappingHandlerAdapterを使用します)。

理論的には、問題を自由に登録できない場合は機能するはずです。

この問題の解決策は、サーブレット構成で正しいHandlerMappingとHandlerAdapterを使用することでした。

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

マーテンに感謝します。

于 2012-06-06T11:56:55.433 に答える