私は、Spring 3.1.0.RELEASEを使用してSpring Restサービスを提供しています。ここで問題となっているサービスコールに関連するコードは次のとおりです。Springサービスがクライアントから要求されたコンテンツタイプを返すのはなぜですか?
@RequestMapping(value="/{var1}", method=RequestMethod.GET, produces="application/json")
@ResponseBody
public String getSomeStuff(@PathVariable final String var1) {
return myJsonString;
}
私は、次のcurlコマンドを使用して、これを呼び出した場合、私が期待する一方で、それは喜んでくれたアプリケーション/ XMLのコンテンツタイプと私のJSON文字列を返します。春3.1のドキュメントに基づいて406:このサービス(シリアライズ)のための私のアプリで余分な設定はありません
curl -v -H "Accept: application/xml" http://localhost:8080/MyServiceSite/myvalue
、私は、設定されたサービスのための無後処理で生のJSONを返すいます。私は何かを見逃していると確信しています、誰かが私が逃したかもしれない何かを指摘できますか?
編集:ここがdocumentationです。これを試してみると、私は見ていました。特にセクション16.3.2.5。私のコードは、Springがシリアライゼーションを処理できるようにするための設定を前提にしているように見えることを除いて、非常に似ています。おそらく、Springのシリアル化をバイパスしても、プロダクションが動作しないでしょうか?
編集:応答コードの期待値を変更しました。 415は私のリクエストボディに不適切なコンテンツを送っていたことを示していますが、406はサーバーのコンテンツタイプに気づかない受け入れヘッダを持つのに適しています。
とにかく、このメソッドを変更してMapを返し、jsonにシリアル化するための設定を追加しました。そして、クライアントから無効なコンテンツタイプを送信すると、適切な406応答を取得します。メソッドの出力がシリアル化されていないときは、「生成」設定が無視されるようです。
おそらく、あなたは自分の質問に変更されたコードと適用可能な設定で答えて、将来見ている人に利益をもたらすことができます。 – digitaljoel
シリアライズを有効にすることなくそれを行う方法を見つけられない場合は、私はそれを行います。私が持っているデータは既にシリアル化されているため、シリアル化を解除して適切な動作をさせるために再直列化しなければならない場合は残念です。だから私はまだこれを稼働させる他の方法を探しています。 – mockobject