web-dev-qa-db-ja.com

Spring MVC @RequestMappingヘッダーは1つの値のみを受け入れることができますか?

これは動作します:

@RequestMapping(value = "/test", method = RequestMethod.POST,
    headers = {"content-type=application/json"}) {
    .......
}

次のように別の値を追加すると、失敗してこれがわかります。

指定されたHTTPメソッドは、リクエストされたリソースでは許可されていません(リクエストメソッド 'POST'はサポートされていません)

@RequestMapping(value = "/test", method = RequestMethod.POST,
    headers = {"content-type=application/json","content-type=application/xml"}) {
    .......
}


これは、Springが2つのcontent type値に「AND」関係があると考えているためだと思いますが、代わりに「OR」にしたいのです。

助言がありますか?

ありがとう!

17
Bobo

content-type=application/json,application/xmlを試しましたか?

それが機能するかどうかはわかりませんが、2つのcontent-typeヘッダーをそこに配置すると、1つだけが勝つと思います。

[〜#〜]または[〜#〜]

異なるcontent-typeヘッダーを持つ同じメソッドで2つのRequestMappingアノテーションを使用する可能性はありますか?

22
Dave G

Spring 3.1.xを使用している場合。 @RequestMappingアノテーションのconsumesproduces属性を使用して見ることができます。改善に関する春のブログ投稿は次のとおりです。

http://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements/

上記のドキュメントの抜粋:

@RequestMapping(value="/pets", headers="Content-Type=application/json")
public void addPet(@RequestBody Pet pet, Model model) {
    // ...
}

に置き換えられます:

@RequestMapping(value="/pets", consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {
    // ...
}

さらに、複数のメディアタイプが必要な場合。以下を実行できます。

produces={"application/json", "application/xml"}

consumes={"application/json", "application/xml"}
33
MasterV