2016-08-03 16 views
1

にそれは非常に単純なものでしたが、私が理解することは非常に参考になります...コンテンツタイプと@ResponseBody春

私はブラウザに文字列値を返すために、私のrestcontrollerで@ResponseBodyを使用。応答文字列はブラウザで正常に受信されました。

すなわち:

@RequestMapping(value="/foo", method=RequestMethod.GET) 
@ResponseBody 
public String foo() { 
    return "bar"; 
} 

上記の応答のコンテンツタイプとは何ですか?これがサーブレットレスポンスでsetAttributeを書くようなものになるのであれば、属性名は何でしょうか?

ブラウザが「application/json」のみを受け入れる場合、springは応答をどのように扱うのですか?

+1

あなたはproduce = "text/plain"を試しましたか?それは参考になるかもしれません。 – Gokul

答えて

2

提出されたコードは、デフォルトですべてのマップされたコントローラメソッドと同様にtext/htmlを生成します。アプリケーション/ JSONを生成したい場合、あなたは

@RequestMapping(value="/foo", method=RequestMethod.GET, produces = "application/json") 

にごRequestMappingを変更する必要がしかし、これは有効なJSON文字列ではありませんあなたが提出方法は、空のボディを返しますので、あなたはそれを変更する必要があります。提出された例は有効なtext/plainです。

リクエストにヘッダ"Accept: application/json"が含まれ、その他のコンテンツタイプが返された場合、SpringはHttpMediaTypeNotAcceptableExceptionがスローされたことを示すJsonタイプの応答を返します。

サーブレットの類推に関して、あなたが意味することを完全に理解していないことをご説明ください。 Stringは応答本体として返されますが、要求属性とはまったく異なります。あなたは何を達成したいですか?

2

内容の種類がプレーンテキストであると仮定します。リクエストセットが "application/json"に受け入れられる場合、ブラウザ/ツールによって異なります。ほとんどの残りのクライアントはapplication/jsonではないので、それを表示しません。 APIを直接呼び出すと、ブラウザのコンテンツのスニッフィング(ヘッダーで無効にすることができる)のために表示されると想定します。

+0

お返事ありがとうございます。もう1つの説明は次のとおりです。レスポンスボディの記述とは、レスポンスにキーと値のペアを設定することです(レスポンスの設定属性のようなもの) –

+0

JSONObjectを作成してtoString()を使用するか、 「{\ "key \":\ "value \"}」のような文字列を作成します –

関連する問題