2つのサーブレットがあります。最初のサーブレットはクライアントに似ており、2番目のサーブレットを呼び出すためにHttpURLConnection
を作成します。
JSONオブジェクトのようにフォーマットされた特別なエラーを送信したいので、次のようにsendErrorメソッドを呼び出します。
response.sendError(code, "{json-object}")
しかし、最初のサーブレットでgetResponseMessage
メソッドでエラーを読み取ったとき、文字列としてjsonオブジェクトではなく、標準のHTTPメッセージを取得するだけです。
Json文字列を取得するにはどうすればよいですか?
HttpServletResponse#sendError()
javadoc から:
サーバーはデフォルトで、指定されたメッセージを含むHTML形式のサーバーエラーページのように見える応答を作成し、コンテンツタイプを「text/html」に設定し、Cookieやその他のヘッダーを変更しないままにします。渡されたステータスコードに対応するWebアプリケーションに対してエラーページ宣言が行われた場合、提案されたmsgパラメータよりも優先して返されます。
したがって、このアプローチでは、HTML応答からメッセージを自分で抽出する以外に選択肢はありません。 JSoup ただし、これでは 便利 になる可能性があります。
目的を達成するには、エラーコードを設定し、自分で応答を記述する必要があります。
response.setStatus(code);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
code
の代わりに、 HttpServletResponse.SC_XXX
定数 このため。