DefaultResponseErrorHandler.hasError tolerates unknown status codes
Issue: SPR-16108
This commit is contained in:
@@ -29,12 +29,14 @@ import org.springframework.util.FileCopyUtils;
|
||||
* Spring's default implementation of the {@link ResponseErrorHandler} interface.
|
||||
*
|
||||
* <p>This error handler checks for the status code on the {@link ClientHttpResponse}:
|
||||
* Any code with series {@link org.springframework.http.HttpStatus.Series#CLIENT_ERROR} or
|
||||
* {@link org.springframework.http.HttpStatus.Series#SERVER_ERROR} is considered to be an
|
||||
* error. This behavior can be changed by overriding the {@link #hasError(HttpStatus)} method.
|
||||
* Any code with series {@link org.springframework.http.HttpStatus.Series#CLIENT_ERROR}
|
||||
* or {@link org.springframework.http.HttpStatus.Series#SERVER_ERROR} is considered to be
|
||||
* an error; this behavior can be changed by overriding the {@link #hasError(HttpStatus)}
|
||||
* method. Unknown status codes will be ignored by {@link #hasError(ClientHttpResponse)}.
|
||||
*
|
||||
* @author Arjen Poutsma
|
||||
* @author Rossen Stoyanchev
|
||||
* @author Juergen Hoeller
|
||||
* @since 3.0
|
||||
* @see RestTemplate#setErrorHandler
|
||||
*/
|
||||
@@ -45,7 +47,12 @@ public class DefaultResponseErrorHandler implements ResponseErrorHandler {
|
||||
*/
|
||||
@Override
|
||||
public boolean hasError(ClientHttpResponse response) throws IOException {
|
||||
return hasError(getHttpStatusCode(response));
|
||||
try {
|
||||
return hasError(getHttpStatusCode(response));
|
||||
}
|
||||
catch (UnknownHttpStatusCodeException ex) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -33,6 +33,7 @@ import static org.mockito.BDDMockito.*;
|
||||
* Unit tests for {@link DefaultResponseErrorHandler}.
|
||||
*
|
||||
* @author Arjen Poutsma
|
||||
* @author Juergen Hoeller
|
||||
*/
|
||||
public class DefaultResponseErrorHandlerTests {
|
||||
|
||||
@@ -67,8 +68,8 @@ public class DefaultResponseErrorHandlerTests {
|
||||
handler.handleError(response);
|
||||
fail("expected HttpClientErrorException");
|
||||
}
|
||||
catch (HttpClientErrorException e) {
|
||||
assertSame(headers, e.getResponseHeaders());
|
||||
catch (HttpClientErrorException ex) {
|
||||
assertSame(headers, ex.getResponseHeaders());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,11 +104,22 @@ public class DefaultResponseErrorHandlerTests {
|
||||
headers.setContentType(MediaType.TEXT_PLAIN);
|
||||
|
||||
given(response.getStatusCode()).willThrow(new IllegalArgumentException("No matching constant for 999"));
|
||||
given(response.getRawStatusCode()).willReturn(999);
|
||||
given(response.getStatusText()).willReturn("Custom status code");
|
||||
given(response.getHeaders()).willReturn(headers);
|
||||
|
||||
handler.handleError(response);
|
||||
}
|
||||
|
||||
@Test // SPR-16108
|
||||
public void hasErrorForUnknownStatusCode() throws Exception {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.TEXT_PLAIN);
|
||||
|
||||
given(response.getStatusCode()).willThrow(new IllegalArgumentException("No matching constant for 999"));
|
||||
given(response.getStatusText()).willReturn("Custom status code");
|
||||
given(response.getHeaders()).willReturn(headers);
|
||||
|
||||
assertFalse(handler.hasError(response));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user