24

ajax 呼び出しを処理し、JSON を返すコントローラー メソッドがあります。json.org の JSON ライブラリを使用して JSON を作成しています。

私は次のことができます:

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String getJson()
{
    JSONObject rootJson = new JSONObject();

    // Populate JSON

    return rootJson.toString();
}

しかし、JSON 文字列をまとめて、Spring に応答の出力ストリームに書き込むだけでは非効率的です。

代わりに、次のように応答出力ストリームに直接書き込むことができます。

@RequestMapping(method = RequestMethod.POST)
public void getJson(HttpServletResponse response)
{
    JSONObject rootJson = new JSONObject();

    // Populate JSON

    rootJson.write(response.getWriter());
}

HttpServletResponseしかし、ハンドラー メソッドにを渡すことに頼るよりも、これを行うためのより良い方法があるようです。

@ResponseBody注釈とともに、使用できるハンドラー メソッドから返すことができる別のクラスまたはインターフェイスはありますか?

4

3 に答える 3

32

出力ストリームまたはライターをコントローラー メソッドのパラメーターとして使用できます。

@RequestMapping(method = RequestMethod.POST)
public void getJson(Writer responseWriter) {
    JSONObject rootJson = new JSONObject();
    rootJson.write(responseWriter);
}

@see Spring Reference Documentation 3.1 Chapter 16.3.3.1 サポートされているメソッド引数の型

OutputStreampsパラメータとしてorWriterを使用することは、テストで a よりもはるかに使いやすいと感じています-そして、私が書いたことにHttpServletResponse注意を払ってくれてありがとう;-)

于 2013-03-08T07:50:51.340 に答える
1

OutputStream または Writer を使用する場合は、ヘッダーを自分で記述する必要があることに注意してください。

1 つの回避策は、InputStreamResource/ResourceHttpMessageConverter を使用することです。

于 2016-10-21T09:56:29.480 に答える