Есть ли способ получить значение String для HttpEntity, когда EntityUtils.toString() возвращает исключение?
Я продолжаю работать в этой ситуации, когда я возвращаю плохой ответ HTTP (например, 400), но не могу посмотреть на HttpEntity в объекте HttpResponse. Когда я перехожу к отладчику, я вижу, что у объекта есть контент (длинa > 0), и я даже могу посмотреть содержимое, но все, что я вижу, это массив чисел (коды ASCII, я думаю?), Которые не являются полезно. Я назову EntityUtils.toString() для сущности, но я вернусь к исключению - исключение IOException или какой-либо исключение "объект в недопустимом состоянии". Это действительно расстраивает! Есть ли способ получить этот контент в удобочитаемой форме?
Вот мой код:
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 и поместить его в исключение.
Ответы
Ответ 1
Вот некоторый код для просмотра объекта как строки (учитывая, что ваш запрос contentType является html или похожим):
String inputLine ;
BufferedReader br = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
try {
while ((inputLine = br.readLine()) != null) {
System.out.println(inputLine);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
Ответ 2
Appache уже предоставил класс Util для EntityUtils.
String responseXml = EntityUtils.toString(httpResponse.getEntity());
EntityUtils.consume(httpResponse.getEntity());