Jettyのプロキシサーブレットを使用して、フロントエンドクライアントからCouchデータベースにリクエストをルーティングしています。プロキシに加えて、CouchDBによって使用される着信リクエストに追加の詳細を挿入しています。HTTPリクエストは、を拡張することで変更されHTTPServletRequestWrapper
ます。getContentLength
メソッドをオーバーライドしてのサイズを再計算するinputStream
と、元のリクエストのサイズのコンテンツのみがCouchDBに送信され、入力JSONが無効であるため、Couch DBはBadRequest(400 HTTP)コードを発行します。Jettyロガーでは、contentWritten != contentLength
メッセージ。Content-Lengthヘッダーを完全に削除すると、Jettyは期待どおりにリクエストを送信し、すべてのコンテンツをプロキシされたリクエストにコピーします。getContentLength
このアプローチが機能する場合でも、のメソッドをオーバーライドして正しいコンテンツ長が設定されている場合でも、Jettyが変更されたリクエストコンテンツを送信しない原因は何でしょうかServletInputStream
。
Jetty 8.1.3バージョンを使用していますが、すべてのリクエストはJSONリクエスト/レスポンスです。ServletInputStream
クラスとメソッドもサブクラス化したread()
ので、問題ないと思います。