web-dev-qa-db-ja.com

JSONオブジェクトとしてエラーメッセージを送信する

2つのサーブレットがあります。最初のサーブレットはクライアントに似ており、2番目のサーブレットを呼び出すためにHttpURLConnectionを作成します。

JSONオブジェクトのようにフォーマットされた特別なエラーを送信したいので、次のようにsendErrorメソッドを呼び出します。

response.sendError(code, "{json-object}")

しかし、最初のサーブレットでgetResponseMessageメソッドでエラーを読み取ったとき、文字列としてjsonオブジェクトではなく、標準のHTTPメッセージを取得するだけです。

Json文字列を取得するにはどうすればよいですか?

30
pAkY88

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定数 このため。

46
BalusC