Browse Source

Allow for null values in ExtractingResponseErrorHandler.hasError

This commit fixes the implementation of
ExtractingResponseErrorHandler.hasError to allow for null values,
indicating an override of the behavior inherited from
DefaultResponseErrorHandler.

Issue: SPR-15544
pull/1414/head
Arjen Poutsma 8 years ago
parent
commit
7894efdd1e
  1. 12
      spring-web/src/main/java/org/springframework/web/client/ExtractingResponseErrorHandler.java
  2. 16
      spring-web/src/test/java/org/springframework/web/client/ExtractingResponseErrorHandlerTests.java

12
spring-web/src/main/java/org/springframework/web/client/ExtractingResponseErrorHandler.java

@ -126,9 +126,15 @@ public class ExtractingResponseErrorHandler extends DefaultResponseErrorHandler @@ -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

16
spring-web/src/test/java/org/springframework/web/client/ExtractingResponseErrorHandlerTests.java

@ -68,6 +68,21 @@ public class ExtractingResponseErrorHandlerTests { @@ -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 { @@ -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);

Loading…
Cancel
Save