@RequestMapping
の一部の消費と生成に関して質問があります。 JSONとXMLの両方を受け入れ、JSONが渡されるとJSONを返し、XMLが渡されるとXMLを返したいエンドポイントがあります。この作業を行うために何か特別なことをする必要がありますか?
サンプルコードを以下に示します。
@RequestMapping(value = "/something", method = PUT,
consumes = {APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE},
produces = {APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE})
public SomeObject updateSomeObject(SomeObject acct) {
return doStuff(acct);
}
これは私が期待している方法で動作しますか、両方のケースを処理するために2つのエンドポイントupdateSomeObjectXML
とupdateSomeObjectJson
が必要ですか?
ありがとう、マイク
Springブログの記事- Spring MVCを使用したコンテンツネゴシエーション -Spring MVCでコンテンツネゴシエーションがどのように機能するかについての詳細を提供します。同じエンドポイントでXMLとJSONを処理する場合、マッピングは正しい、記事から要約するには:
パス拡張機能を使用する-/something.json
にjsonを送信し、/something.xml
にxmlを送信し、帰りに同じことを期待できます
Accept
ヘッダーを使用し、application/json
またはapplication/xml
の値を使用し、Content-Type
を使用して、送信されたメディアタイプを指定します。
簡潔な答え:
@ ResponseBodyでメソッドに注釈を付け、@ RequestBodyでメソッドパラメーターに注釈を付けると、機能します(2つのメソッドは不要です)。
説明:
最初に、属性を生成および消費します マッピングタイプを絞り込むに使用されます。デフォルトでは、最初に見つかったHttpMessageConverterが使用され、要求されたメディアタイプに一致します。
次に、クライアントはメディアタイプを要求するでメディアタイプを指定します。
-リクエストヘッダーを受け入れる
-RLサフィックス(http://....//some。xml=> "application/xml"メディアタイプ要求された)
-RL形式パラメーター(.../some?format = xls)
3番目に、producesと@ ResponseBodyを組み合わせて、要求されたメディアタイプでオブジェクトを生成します(必要な場合、GET要求に最適です)クライアントに何かを送り返す)、consumesと@ RequestBodyを組み合わせて、要求されたメディアタイプ( POSTリクエスト、クライアントから何かを取得する必要がある場合)に最適です。
4、@ ResponseBodyが使用されない場合、HttpMessageConvertersは使用されません。むしろViewResolversはキックインし、ビュー(HTML、PDF ...)を生成し、戻り値の型はViewResolversに付随する規則に従う必要があります(詳細については、デフォルトのビューリゾルバとInternalResourceViewResolverを確認してください) 。
それが役に立てば幸い。
その他のソース:
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#consumes-- - http://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc
まあ、
消費/プロデュースString[]
をパラメーターとして(Springのドキュメンテーションの RequestMapping を参照)、動作するはずです。 headers = "content-type=application/json,application/xml"
。