5

Twilio API に応答する Java サーブレットがあります。Twilio は、私の応答が使用しているチャンク転送をサポートしていないようです。どうすれば使用を避けることができTransfer-Encoding: chunkedますか?

これが私のコードです:

// response is HttpServletResponse
// xml is a String with XML in it
response.getWriter().write(xml);
response.getWriter().flush();

サーブレット コンテナーとして Jetty を使用しています。

4

3 に答える 3

7

Jetty は、応答のコンテンツの長さが分からない場合や永続的な接続を使用している場合、チャンクされた応答を使用すると思います。チャンキングを避けるには、応答コンテンツの長さを設定するか、応答に "Connection":"close" ヘッダーを設定して永続的な接続を避ける必要があります。

于 2013-05-13T23:52:23.573 に答える
6

ストリームに書き込む前にContent-lengthを設定してみてください。正しいエンコーディングに従ってバイト数を計算することを忘れないでください。

final byte[] content = xml.getBytes("UTF-8");
response.setContentLength(content.length);
response.setContentType("text/xml"); // or "text/xml; charset=UTF-8"
response.setCharacterEncoding("UTF-8");

final OutputStream out = response.getOutputStream();
out.write(content);
于 2013-05-13T23:56:13.053 に答える
1

Writerコンテナは、またはを使用して書き込まれるデータのサイズに基づいて、 Content-Length または Transfer-Encoding を使用することを決定しますoutputStream。データのサイズが より大きい場合HttpServletResponse.getBufferSize()、応答はトランキングされます。そうでない場合は、Content-Length使用されます。

あなたの場合、2番目のフラッシュコードを削除するだけで問題が解決します。

于 2013-09-09T08:07:31.097 に答える