Есть ли способ получить значение 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());