diff --git a/spring-web/src/main/java/org/springframework/web/client/ExtractingResponseErrorHandler.java b/spring-web/src/main/java/org/springframework/web/client/ExtractingResponseErrorHandler.java index f51e86241e1..074c2cd41c3 100644 --- a/spring-web/src/main/java/org/springframework/web/client/ExtractingResponseErrorHandler.java +++ b/spring-web/src/main/java/org/springframework/web/client/ExtractingResponseErrorHandler.java @@ -126,9 +126,15 @@ public class ExtractingResponseErrorHandler extends DefaultResponseErrorHandler @Override protected boolean hasError(HttpStatus statusCode) { - return this.statusMapping.containsKey(statusCode) || - this.seriesMapping.containsKey(statusCode.series()) || - super.hasError(statusCode); + if (this.statusMapping.containsKey(statusCode)) { + return this.statusMapping.get(statusCode) != null; + } + else if (this.seriesMapping.containsKey(statusCode.series())) { + return this.seriesMapping.get(statusCode.series()) != null; + } + else { + return super.hasError(statusCode); + } } @Override diff --git a/spring-web/src/test/java/org/springframework/web/client/ExtractingResponseErrorHandlerTests.java b/spring-web/src/test/java/org/springframework/web/client/ExtractingResponseErrorHandlerTests.java index 76b028a8631..18e97583639 100644 --- a/spring-web/src/test/java/org/springframework/web/client/ExtractingResponseErrorHandlerTests.java +++ b/spring-web/src/test/java/org/springframework/web/client/ExtractingResponseErrorHandlerTests.java @@ -68,6 +68,21 @@ public class ExtractingResponseErrorHandlerTests { assertFalse(this.errorHandler.hasError(this.response)); } + @Test + public void hasErrorOverride() throws Exception { + this.errorHandler.setSeriesMapping(Collections + .singletonMap(HttpStatus.Series.CLIENT_ERROR, null)); + + given(this.response.getStatusCode()).willReturn(HttpStatus.I_AM_A_TEAPOT); + assertTrue(this.errorHandler.hasError(this.response)); + + given(this.response.getStatusCode()).willReturn(HttpStatus.NOT_FOUND); + assertFalse(this.errorHandler.hasError(this.response)); + + given(this.response.getStatusCode()).willReturn(HttpStatus.OK); + assertFalse(this.errorHandler.hasError(this.response)); + } + @Test public void handleErrorStatusMatch() throws Exception { given(this.response.getStatusCode()).willReturn(HttpStatus.I_AM_A_TEAPOT); @@ -133,6 +148,7 @@ public class ExtractingResponseErrorHandlerTests { public void handleNoMatchOverride() throws Exception { this.errorHandler.setSeriesMapping(Collections .singletonMap(HttpStatus.Series.CLIENT_ERROR, null)); + given(this.response.getStatusCode()).willReturn(HttpStatus.NOT_FOUND); HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setContentType(MediaType.APPLICATION_JSON);