From 6d7b4d6653ce3d8ba3334949fa281e78c1a1101a Mon Sep 17 00:00:00 2001 From: wangkang Date: Mon, 13 Nov 2017 10:58:29 +0800 Subject: [PATCH] =?UTF-8?q?[=E9=87=8D=E8=A6=81]:=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E4=B8=AD=E4=B8=8D=E4=BC=9A=E5=86=8D=E6=8A=9B=E5=87=BA401?= =?UTF-8?q?=E7=9A=84http=E7=8A=B6=E6=80=81=E7=A0=81=20&&=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0RestTemplate=E7=9A=84=E9=94=99=E8=AF=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86handler,=E8=A7=A3=E5=86=B3=E5=9C=A8rest=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=8A=A5=E9=94=99=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B?= =?UTF-8?q?,=E6=97=A0=E6=B3=95=E6=8B=BF=E5=88=B0responseBody=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/itkk/udf/core/BaseApplication.java | 5 +- .../exception/handle/ExceptionController.java | 3 +- .../exception/handle/ExceptionHandle.java | 2 +- .../handle/RmsResponseErrorHandler.java | 67 +++++++++++++++++++ .../main/java/org/itkk/udf/rms/RmsConfig.java | 5 +- 5 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/RmsResponseErrorHandler.java diff --git a/udf-starter-core/src/main/java/org/itkk/udf/core/BaseApplication.java b/udf-starter-core/src/main/java/org/itkk/udf/core/BaseApplication.java index ab72d2f..1c9f22c 100644 --- a/udf-starter-core/src/main/java/org/itkk/udf/core/BaseApplication.java +++ b/udf-starter-core/src/main/java/org/itkk/udf/core/BaseApplication.java @@ -1,5 +1,6 @@ package org.itkk.udf.core; +import org.itkk.udf.core.exception.handle.RmsResponseErrorHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.cloud.context.config.annotation.RefreshScope; @@ -39,7 +40,9 @@ public class BaseApplication { */ @Bean(name = "externalRestTemplate") public RestTemplate externalRestTemplate(ClientHttpRequestFactory requestFactory) { - return new RestTemplate(requestFactory); + RestTemplate restTemplate = new RestTemplate(requestFactory); + restTemplate.setErrorHandler(new RmsResponseErrorHandler()); + return restTemplate; } /** diff --git a/udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/ExceptionController.java b/udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/ExceptionController.java index fe27121..0723cf8 100644 --- a/udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/ExceptionController.java +++ b/udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/ExceptionController.java @@ -146,7 +146,6 @@ public class ExceptionController extends AbstractErrorController { * @return RestResponse */ private RestResponse getRestResponse(HttpServletRequest request, HttpStatus status, Map body) { //NOSONAR - log.info(body.toString()); ErrorResult errorResult = new ErrorResult(); if (status == HttpStatus.NOT_FOUND) { //404处理 errorResult.setType(NoHandlerFoundException.class.getName()); @@ -160,7 +159,7 @@ public class ExceptionController extends AbstractErrorController { if (exception.getCause() instanceof PermissionException) { status = HttpStatus.FORBIDDEN; //NOSONAR } else if (exception.getCause() instanceof AuthException) { - status = HttpStatus.UNAUTHORIZED; //NOSONAR + status = HttpStatus.FORBIDDEN; //NOSONAR } errorResult = ExceptionHandle.buildError(applicationConfig, exception.getCause()); } else { diff --git a/udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/ExceptionHandle.java b/udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/ExceptionHandle.java index 0adcbf7..647f506 100644 --- a/udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/ExceptionHandle.java +++ b/udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/ExceptionHandle.java @@ -72,7 +72,7 @@ public class ExceptionHandle extends ResponseEntityExceptionHandler { if (ex instanceof PermissionException) { //权限异常 localHttpStatus = HttpStatus.FORBIDDEN; } else if (ex instanceof AuthException) { //认证异常 - localHttpStatus = HttpStatus.UNAUTHORIZED; + localHttpStatus = HttpStatus.FORBIDDEN; } else if (ex instanceof ParameterValidException) { //参数校验异常 localHttpStatus = HttpStatus.BAD_REQUEST; } else if (ex instanceof RestClientResponseException) { //rest请求异常 diff --git a/udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/RmsResponseErrorHandler.java b/udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/RmsResponseErrorHandler.java new file mode 100644 index 0000000..eb4ccd3 --- /dev/null +++ b/udf-starter-core/src/main/java/org/itkk/udf/core/exception/handle/RmsResponseErrorHandler.java @@ -0,0 +1,67 @@ +package org.itkk.udf.core.exception.handle; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.web.client.DefaultResponseErrorHandler; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.RestClientException; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +/** + * RmsResponseErrorHandler + */ +@Slf4j +public class RmsResponseErrorHandler extends DefaultResponseErrorHandler { + + @Override + public void handleError(ClientHttpResponse response) throws IOException { + //获得错误信息 + String responseBody = getData(response.getBody()); + HttpStatus statusCode = getHttpStatusCode(response); + switch (statusCode.series()) { + case CLIENT_ERROR: + throw new HttpClientErrorException(statusCode, response.getStatusText(), + response.getHeaders(), responseBody.getBytes("UTF-8"), getCharset(response)); + case SERVER_ERROR: + throw new HttpServerErrorException(statusCode, response.getStatusText(), + response.getHeaders(), responseBody.getBytes("UTF-8"), getCharset(response)); + default: + throw new RestClientException("Unknown status code [" + statusCode + "]"); + } + } + + /** + * 读取返回的信息 + * + * @param in 输入流 + * @return 数据 + * @throws IOException 异常 + */ + private String getData(InputStream in) throws IOException { + String result = ""; + StringBuilder sb = new StringBuilder(); + BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8")); + String line; + try { + while ((line = br.readLine()) != null) { + sb.append(line); + } + br.close(); + } finally { + if (result != null) { + try { + br.close(); + } catch (IOException e) { + log.error("getData", e); + } + } + } + return sb.toString(); + } +} diff --git a/udf-starter-rms/src/main/java/org/itkk/udf/rms/RmsConfig.java b/udf-starter-rms/src/main/java/org/itkk/udf/rms/RmsConfig.java index efbfc1e..5a3fffa 100644 --- a/udf-starter-rms/src/main/java/org/itkk/udf/rms/RmsConfig.java +++ b/udf-starter-rms/src/main/java/org/itkk/udf/rms/RmsConfig.java @@ -7,6 +7,7 @@ package org.itkk.udf.rms; import lombok.Data; +import org.itkk.udf.core.exception.handle.RmsResponseErrorHandler; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; @@ -48,7 +49,9 @@ public class RmsConfig { @LoadBalanced @Primary public RestTemplate restTemplate(ClientHttpRequestFactory requestFactory) { - return new RestTemplate(requestFactory); + RestTemplate restTemplate = new RestTemplate(requestFactory); + restTemplate.setErrorHandler(new RmsResponseErrorHandler()); + return restTemplate; } /**