Browse Source

Polish Http[Client|Server]ErrorException hierarchy

pull/1921/merge
Rossen Stoyanchev 7 years ago
parent
commit
c90ab5fb0a
  1. 57
      spring-web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java
  2. 36
      spring-web/src/main/java/org/springframework/web/client/HttpClientErrorException.java
  3. 24
      spring-web/src/main/java/org/springframework/web/client/HttpServerErrorException.java

57
spring-web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java

@ -92,69 +92,16 @@ public class DefaultResponseErrorHandler implements ResponseErrorHandler { @@ -92,69 +92,16 @@ public class DefaultResponseErrorHandler implements ResponseErrorHandler {
HttpHeaders headers = response.getHeaders();
byte[] body = getResponseBody(response);
Charset charset = getCharset(response);
switch (statusCode.series()) {
case CLIENT_ERROR:
handleClientError(statusCode, statusText, headers, body, charset);
return;
throw HttpClientErrorException.create(statusCode, statusText, headers, body, charset);
case SERVER_ERROR:
handleServerError(statusCode, statusText, headers, body, charset);
return;
throw HttpServerErrorException.create(statusCode, statusText, headers, body, charset);
default:
throw new UnknownHttpStatusCodeException(statusCode.value(), statusText, headers, body, charset);
}
}
private void handleClientError(
HttpStatus statusCode, String statusText, HttpHeaders headers, byte[] body, @Nullable Charset charset) {
switch (statusCode) {
case BAD_REQUEST:
throw new HttpClientErrorException.BadRequest(statusText, headers, body, charset);
case UNAUTHORIZED:
throw new HttpClientErrorException.Unauthorized(statusText, headers, body, charset);
case FORBIDDEN:
throw new HttpClientErrorException.Forbidden(statusText, headers, body, charset);
case NOT_FOUND:
throw new HttpClientErrorException.NotFound(statusText, headers, body, charset);
case METHOD_NOT_ALLOWED:
throw new HttpClientErrorException.MethodNotAllowed(statusText, headers, body, charset);
case NOT_ACCEPTABLE:
throw new HttpClientErrorException.NotAcceptable(statusText, headers, body, charset);
case CONFLICT:
throw new HttpClientErrorException.Conflict(statusText, headers, body, charset);
case GONE:
throw new HttpClientErrorException.Gone(statusText, headers, body, charset);
case UNSUPPORTED_MEDIA_TYPE:
throw new HttpClientErrorException.UnsupportedMediaType(statusText, headers, body, charset);
case TOO_MANY_REQUESTS:
throw new HttpClientErrorException.TooManyRequests(statusText, headers, body, charset);
case UNPROCESSABLE_ENTITY:
throw new HttpClientErrorException.UnprocessableEntity(statusText, headers, body, charset);
default:
throw new HttpClientErrorException(statusCode, statusText, headers, body, charset);
}
}
private void handleServerError(
HttpStatus statusCode, String statusText, HttpHeaders headers, byte[] body, @Nullable Charset charset) {
switch (statusCode) {
case INTERNAL_SERVER_ERROR:
throw new HttpServerErrorException.InternalServerError(statusText, headers, body, charset);
case NOT_IMPLEMENTED:
throw new HttpServerErrorException.NotImplemented(statusText, headers, body, charset);
case BAD_GATEWAY:
throw new HttpServerErrorException.BadGateway(statusText, headers, body, charset);
case SERVICE_UNAVAILABLE:
throw new HttpServerErrorException.ServiceUnavailable(statusText, headers, body, charset);
case GATEWAY_TIMEOUT:
throw new HttpServerErrorException.GatewayTimeout(statusText, headers, body, charset);
default:
throw new HttpServerErrorException(statusCode, statusText, headers, body, charset);
}
}
/**
* Determine the HTTP status of the given response.
* @param response the response to inspect

36
spring-web/src/main/java/org/springframework/web/client/HttpClientErrorException.java

@ -67,6 +67,42 @@ public class HttpClientErrorException extends HttpStatusCodeException { @@ -67,6 +67,42 @@ public class HttpClientErrorException extends HttpStatusCodeException {
}
/**
* Create {@code HttpClientErrorException} or an HTTP status specific sub-class.
* @since 5.1
*/
public static HttpClientErrorException create(
HttpStatus statusCode, String statusText, HttpHeaders headers, byte[] body, @Nullable Charset charset) {
switch (statusCode) {
case BAD_REQUEST:
return new HttpClientErrorException.BadRequest(statusText, headers, body, charset);
case UNAUTHORIZED:
return new HttpClientErrorException.Unauthorized(statusText, headers, body, charset);
case FORBIDDEN:
return new HttpClientErrorException.Forbidden(statusText, headers, body, charset);
case NOT_FOUND:
return new HttpClientErrorException.NotFound(statusText, headers, body, charset);
case METHOD_NOT_ALLOWED:
return new HttpClientErrorException.MethodNotAllowed(statusText, headers, body, charset);
case NOT_ACCEPTABLE:
return new HttpClientErrorException.NotAcceptable(statusText, headers, body, charset);
case CONFLICT:
return new HttpClientErrorException.Conflict(statusText, headers, body, charset);
case GONE:
return new HttpClientErrorException.Gone(statusText, headers, body, charset);
case UNSUPPORTED_MEDIA_TYPE:
return new HttpClientErrorException.UnsupportedMediaType(statusText, headers, body, charset);
case TOO_MANY_REQUESTS:
return new HttpClientErrorException.TooManyRequests(statusText, headers, body, charset);
case UNPROCESSABLE_ENTITY:
return new HttpClientErrorException.UnprocessableEntity(statusText, headers, body, charset);
default:
return new HttpClientErrorException(statusCode, statusText, headers, body, charset);
}
}
// Subclasses for specific HTTP status codes
/**

24
spring-web/src/main/java/org/springframework/web/client/HttpServerErrorException.java

@ -67,6 +67,30 @@ public class HttpServerErrorException extends HttpStatusCodeException { @@ -67,6 +67,30 @@ public class HttpServerErrorException extends HttpStatusCodeException {
}
/**
* Create an {@code HttpServerErrorException} or an HTTP status specific sub-class.
* @since 5.1
*/
public static HttpServerErrorException create(
HttpStatus statusCode, String statusText, HttpHeaders headers, byte[] body, @Nullable Charset charset) {
switch (statusCode) {
case INTERNAL_SERVER_ERROR:
return new HttpServerErrorException.InternalServerError(statusText, headers, body, charset);
case NOT_IMPLEMENTED:
return new HttpServerErrorException.NotImplemented(statusText, headers, body, charset);
case BAD_GATEWAY:
return new HttpServerErrorException.BadGateway(statusText, headers, body, charset);
case SERVICE_UNAVAILABLE:
return new HttpServerErrorException.ServiceUnavailable(statusText, headers, body, charset);
case GATEWAY_TIMEOUT:
return new HttpServerErrorException.GatewayTimeout(statusText, headers, body, charset);
default:
return new HttpServerErrorException(statusCode, statusText, headers, body, charset);
}
}
// Subclasses for specific HTTP status codes
/**

Loading…
Cancel
Save