私は悪いHTTP応答(400のような)を返すが、HttpResponseオブジェクトのHttpEntityを見ることができないこの状況に陥っています。デバッガをステップ実行すると、エンティティにコンテンツ(長さ> 0)があり、コンテンツを見ることさえできますが、表示されるのは数字の配列(私が推測するASCIIコードですか?)です役に立ったエンティティでEntityUtils.toString()を呼び出しますが、IOException、または「オブジェクトが無効な状態になっています」という例外が返されます。これは本当にイライラしています!このコンテンツを人間が読める形式で入手する方法はありますか?ここでEntityUtils.toString()が例外を返すときに、HttpEntityのString値を取得する方法はありますか?
は私のコードです:私は例外をスローどこ
protected JSONObject makeRequest(HttpRequestBase request) throws ClientProtocolException, IOException, JSONException, WebRequestBadStatusException {
HttpClient httpclient = new DefaultHttpClient();
try {
request.addHeader("Content-Type", "application/json");
request.addHeader("Authorization", "OAuth " + accessToken);
request.addHeader("X-PrettyPrint", "1");
HttpResponse response = httpclient.execute(request);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode < 200 || statusCode >= 300) {
throw new WebRequestBadStatusException(statusCode);
}
HttpEntity entity = response.getEntity();
if (entity != null) {
return new JSONObject(EntityUtils.toString(entity));
} else {
return null;
}
} finally {
httpclient.getConnectionManager().shutdown();
}
}
を参照してください?私がしたいのはHttpEntityの内容を吸い取って例外に入れることです。
文字列化に失敗した場合は、常に 'EntityUtils.toByteArray()'で生のバイトを取得し、それらのバイトの16進ダンプを自分で生成することができます。 –
ええ、私はそれを考えました。私たちがデバッガから得た[100,21,45,22]タイプの出力をとり、それを人が読めるものに変えるユーティリティを知っていますか? – sangfroid
Stringコンストラクタを試してください。http://download.oracle.com/javase/1,5.0/docs/api/java/lang/String.html#String(byte []、java.lang.String) –