Details
-
Improvement
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
4.5.2
-
None
Description
Hello. This is my first time posting an issue to this project. I've done my best to be helpful.
Many modern RESTful APIs (e.g. Amazon Web Services) will return a generic status description (e.g. "Bad Request") and details in the body of the response on an error (e.g. code 400).
However the org.apache.http.client.fluent.Response.returnContent() ignores the body (content) on a return code of over or equal to 300, causing the debugging information to be lost. This leads to generic exception messages.
A possible solution would be to include the body in the exception string, as demonstrated in the below ResponseHandler.
protected static class FaultTolerantContentResponseHandler extends ContentResponseHandler { @Override public Content handleResponse(final HttpResponse response) throws HttpResponseException, IOException { final StatusLine statusLine = response.getStatusLine(); final HttpEntity entity = response.getEntity(); Content content = entity == null ? null : handleEntity(entity); if (statusLine.getStatusCode() >= 300) { String message = statusLine.getReasonPhrase(); if (content != null) { message += ", body was " + content.asString(); } throw new HttpResponseException(statusLine.getStatusCode(), message); } return content; } }
Alternatives would be to create a new subclass of HttpResponseException that would have an additional getErrorContent() method to preserve backwards compatibility.
Attachments
Issue Links
- causes
-
HTTPCLIENT-2312 Response body from returnContent() truncated to 256 bytes
- Resolved