| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package com.pavis.app.saasbacken.exception;
- import com.pavis.app.saasbacken.http.ErrorCode;
- import com.pavis.app.saasbacken.http.ResultBody;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.http.HttpStatus;
- import org.springframework.validation.BindingResult;
- import org.springframework.web.bind.MethodArgumentNotValidException;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.RestControllerAdvice;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.util.Objects;
- /**
- * 统一异常处理器
- */
- @Slf4j
- @RestControllerAdvice
- public class GlobalExceptionHandler {
- /**
- * 其他异常
- */
- @ExceptionHandler(Exception.class)
- public static ResultBody exception(Exception ex, HttpServletRequest request, HttpServletResponse response) {
- ResultBody resultBody = resolveException(ex, request.getRequestURI());
- response.setStatus(resultBody.getHttpStatus());
- return resultBody;
- }
- /**
- * 静态解析异常,可以直接调用
- */
- public static ResultBody resolveException(Exception ex, String path) {
- ErrorCode code = ErrorCode.ERROR;
- int httpStatus = HttpStatus.OK.value();
- String className = ex.getClass().getName();
- if (className.contains("BadCredentialsException")) {
- code = ErrorCode.BAD_CREDENTIALS;
- } else if (className.contains("AccountExpiredException")) {
- code = ErrorCode.ACCOUNT_EXPIRED;
- } else if (className.contains("AccessDeniedException")) {
- code = ErrorCode.ACCESS_DENIED;
- } else if (className.contains("HttpMessageNotReadableException")
- || className.contains("TypeMismatchException")
- || className.contains("MissingServletRequestParameterException")) {
- code = ErrorCode.BAD_REQUEST;
- } else if (className.contains("NoHandlerFoundException")) {
- code = ErrorCode.NOT_FOUND;
- } else if (className.contains("HttpRequestMethodNotSupportedException")) {
- code = ErrorCode.METHOD_NOT_ALLOWED;
- } else if (className.contains("HttpMediaTypeNotAcceptableException")) {
- code = ErrorCode.MEDIA_TYPE_NOT_ACCEPTABLE;
- } else if (className.contains("MethodArgumentNotValidException")) {
- BindingResult bindingResult = ((MethodArgumentNotValidException) ex).getBindingResult();
- code = ErrorCode.ALERT;
- return ResultBody.failed().code(code.getCode()).msg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
- } else if (className.contains("IllegalArgumentException")) {
- code = ErrorCode.ILLEGAL_ARGUMENT;
- } else if (className.contains("AlertException")) {
- code = ErrorCode.ALERT;
- } else if (className.contains("CheckException")) {
- code = ErrorCode.AUTHENTICATION_FAILED;
- } else if (className.contains("LoginException")) {
- code = ErrorCode.LOGIN_FAILURE;
- } else if (className.contains("OrgException")) {
- code = ErrorCode.REQUEST_ORG_FAILED;
- } else if (className.contains("OpException")) {
- code = ErrorCode.FAIL;
- } else if (className.contains("NumberFormatException")) {
- code = ErrorCode.FAIL;
- }else if (className.contains("IsRelationExistException")) {
- code = ErrorCode.IS_RELATION_EXIST;
- }else if (className.contains("ExcelHeadException")) {
- code = ErrorCode.ERROR_EXCEL_HEAD;
- }
- return buildBody(ex, code, path, httpStatus);
- }
- /**
- * 构建返回结果对象
- */
- private static ResultBody buildBody(Exception exception, ErrorCode resultCode, String path, int httpStatus) {
- exception.printStackTrace();
- if (resultCode == null) {
- resultCode = ErrorCode.ERROR;
- }
- return ResultBody.failed().code(resultCode.getCode()).msg(exception.getMessage()).path(path).httpStatus(httpStatus);
- }
- }
|