Include response body in UnknownHttpStatusCodeException
Spring Framework 5.2.2 introduced a regression in DefaultResponseErrorHandler.handleError(ClientHttpResponse) Specifically, for use cases where the InputStream had already been consumed by the first invocation of getResponseBody(), the second invocation of getResponseBody() resulted in the response body being absent in the created UnknownHttpStatusCodeException. This commit fixes this by invoking getResponseBody() only once in DefaultResponseErrorHandler.handleError(ClientHttpReponse) in order to reuse the retrieved response body for creating the exception message and as a separate argument to the UnknownHttpStatusCodeException constructor. Closes gh-24595
This commit is contained in:
committed by
Sam Brannen
parent
5e1e689739
commit
2fb13d410d
@@ -102,12 +102,13 @@ public class DefaultResponseErrorHandler implements ResponseErrorHandler {
|
||||
public void handleError(ClientHttpResponse response) throws IOException {
|
||||
HttpStatus statusCode = HttpStatus.resolve(response.getRawStatusCode());
|
||||
if (statusCode == null) {
|
||||
byte[] body = getResponseBody(response);
|
||||
String message = getErrorMessage(
|
||||
response.getRawStatusCode(), response.getStatusText(),
|
||||
getResponseBody(response), getCharset(response));
|
||||
body, getCharset(response));
|
||||
throw new UnknownHttpStatusCodeException(message,
|
||||
response.getRawStatusCode(), response.getStatusText(),
|
||||
response.getHeaders(), getResponseBody(response), getCharset(response));
|
||||
response.getHeaders(), body, getCharset(response));
|
||||
}
|
||||
handleError(response, statusCode);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user