From a9c891e89fa19101d608b5f7cdc22bb680bef6d1 Mon Sep 17 00:00:00 2001 From: Gadfly Date: Fri, 6 Aug 2021 17:52:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(GlobalExceptionHandler.java):=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9status=E8=BF=94=E5=9B=9E=E6=96=B9=E5=BC=8F=EF=BC=8C?= =?UTF-8?q?=E5=8E=BB=E9=99=A4FeignException?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/exception/GlobalExceptionHandler.java | 75 +++++++++---------- 1 file changed, 36 insertions(+), 39 deletions(-) diff --git a/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/GlobalExceptionHandler.java b/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/GlobalExceptionHandler.java index 27057574..47e1fd01 100644 --- a/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/GlobalExceptionHandler.java +++ b/youlai-common/common-web/src/main/java/com/youlai/common/web/exception/GlobalExceptionHandler.java @@ -4,7 +4,6 @@ import cn.hutool.json.JSONObject; import com.fasterxml.jackson.core.JsonProcessingException; import com.youlai.common.result.Result; import com.youlai.common.result.ResultCode; -import feign.FeignException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.TypeMismatchException; import org.springframework.http.HttpStatus; @@ -13,13 +12,14 @@ import org.springframework.validation.BindException; import org.springframework.validation.FieldError; import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import org.springframework.web.servlet.NoHandlerFoundException; import javax.servlet.ServletException; -import javax.servlet.http.HttpServletResponse; import javax.validation.ConstraintViolationException; +import javax.validation.ValidationException; import java.util.concurrent.CompletionException; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -36,8 +36,9 @@ public class GlobalExceptionHandler { /** * 表单绑定到 java bean 出错时抛出 BindException 异常 */ + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(BindException.class) - public Result processException(BindException e, HttpServletResponse response) { + public Result processException(BindException e) { log.error(e.getMessage(), e); JSONObject msg = new JSONObject(); e.getAllErrors().forEach(error -> { @@ -50,15 +51,15 @@ public class GlobalExceptionHandler { error.getDefaultMessage()); } }); - response.setStatus(HttpStatus.BAD_REQUEST.value()); return Result.failed(ResultCode.PARAM_ERROR, msg.toString()); } /** * 普通参数(非 java bean)校验出错时抛出 ConstraintViolationException 异常 */ + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(ConstraintViolationException.class) - public Result processException(ConstraintViolationException e, HttpServletResponse response) { + public Result processException(ConstraintViolationException e) { log.error(e.getMessage(), e); JSONObject msg = new JSONObject(); e.getConstraintViolations().forEach(constraintViolation -> { @@ -66,126 +67,122 @@ public class GlobalExceptionHandler { String path = constraintViolation.getPropertyPath().toString(); msg.set(path, template); }); - response.setStatus(HttpStatus.BAD_REQUEST.value()); return Result.failed(ResultCode.PARAM_ERROR, msg.toString()); } + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(ValidationException.class) + public Result processException(ValidationException e) { + log.error(e.getMessage(), e); + return Result.failed(ResultCode.PARAM_ERROR, "参数校验失败"); + } + /** * NoHandlerFoundException */ + @ResponseStatus(HttpStatus.NOT_FOUND) @ExceptionHandler(NoHandlerFoundException.class) - public Result processException(NoHandlerFoundException e, HttpServletResponse response) { + public Result processException(NoHandlerFoundException e) { log.error(e.getMessage(), e); - response.setStatus(HttpStatus.NOT_FOUND.value()); return Result.failed(ResultCode.RESOURCE_NOT_FOUND); } /** * MissingServletRequestParameterException */ + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(MissingServletRequestParameterException.class) - public Result processException(MissingServletRequestParameterException e, HttpServletResponse response) { + public Result processException(MissingServletRequestParameterException e) { log.error(e.getMessage(), e); - response.setStatus(HttpStatus.BAD_REQUEST.value()); return Result.failed(ResultCode.PARAM_IS_NULL); } /** * MethodArgumentTypeMismatchException */ + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(MethodArgumentTypeMismatchException.class) - public Result processException(MethodArgumentTypeMismatchException e, HttpServletResponse response) { + public Result processException(MethodArgumentTypeMismatchException e) { log.error(e.getMessage(), e); - response.setStatus(HttpStatus.BAD_REQUEST.value()); return Result.failed(ResultCode.PARAM_ERROR, "类型错误"); } /** * ServletException */ + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(ServletException.class) - public Result processException(ServletException e, HttpServletResponse response) { + public Result processException(ServletException e) { log.error(e.getMessage(), e); - response.setStatus(HttpStatus.BAD_REQUEST.value()); return Result.failed(e.getMessage()); } + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(IllegalArgumentException.class) - public Result handleIllegalArgumentException(IllegalArgumentException e, HttpServletResponse response) { + public Result handleIllegalArgumentException(IllegalArgumentException e) { log.error("非法参数异常,异常原因:{}", e.getMessage(), e); - response.setStatus(HttpStatus.BAD_REQUEST.value()); return Result.failed(e.getMessage()); } + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(JsonProcessingException.class) - public Result handleJsonProcessingException(JsonProcessingException e, HttpServletResponse response) { + public Result handleJsonProcessingException(JsonProcessingException e) { log.error("Json转换异常,异常原因:{}", e.getMessage(), e); - response.setStatus(HttpStatus.BAD_REQUEST.value()); return Result.failed(e.getMessage()); } /** * HttpMessageNotReadableException */ + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(HttpMessageNotReadableException.class) - public Result processException(HttpMessageNotReadableException e, HttpServletResponse response) { + public Result processException(HttpMessageNotReadableException e) { log.error(e.getMessage(), e); String errorMessage = "请求体不可为空"; Throwable cause = e.getCause(); if (cause != null) { errorMessage = convertMessage(cause); } - response.setStatus(HttpStatus.BAD_REQUEST.value()); return Result.failed(errorMessage); } /** * TypeMismatchException */ + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(TypeMismatchException.class) - public Result processException(TypeMismatchException e, HttpServletResponse response) { + public Result processException(TypeMismatchException e) { log.error(e.getMessage(), e); - response.setStatus(HttpStatus.BAD_REQUEST.value()); return Result.failed(e.getMessage()); } - /** - * FeignException - */ - @ExceptionHandler(FeignException.class) - public Result processException(FeignException e, HttpServletResponse response) { - log.error(e.getMessage(), e); - response.setStatus(HttpStatus.BAD_REQUEST.value()); - return Result.failed("微服务调用异常"); - } - /** * CompletionException */ + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(CompletionException.class) - public Result processException(CompletionException e, HttpServletResponse response) { + public Result processException(CompletionException e) { log.error(e.getMessage(), e); if (e.getMessage().startsWith("feign.FeignException")) { - response.setStatus(HttpStatus.BAD_REQUEST.value()); return Result.failed("微服务调用异常"); } - return handleException(e, response); + return handleException(e); } + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(BizException.class) - public Result handleBizException(BizException e, HttpServletResponse response) { + public Result handleBizException(BizException e) { log.error("业务异常,异常原因:{}", e.getMessage(), e); - response.setStatus(HttpStatus.BAD_REQUEST.value()); if (e.getResultCode() != null) { return Result.failed(e.getResultCode()); } return Result.failed(e.getMessage()); } + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(Exception.class) - public Result handleException(Exception e, HttpServletResponse response) { + public Result handleException(Exception e) { log.error("未知异常,异常原因:{}", e.getMessage(), e); - response.setStatus(HttpStatus.BAD_REQUEST.value()); return Result.failed(); } -- GitLab