package com.gkhy.safePlatform.config.exception; import com.gkhy.safePlatform.commons.enums.ResultCodes; import com.gkhy.safePlatform.commons.exception.AusinessException; import com.gkhy.safePlatform.commons.exception.BusinessException; import com.gkhy.safePlatform.commons.vo.ResultVO; import io.netty.util.internal.ThrowableUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.core.AuthenticationException; import org.springframework.stereotype.Controller; import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvice public class GlobalExceptionHandler { private final Logger logger = LoggerFactory.getLogger(this.getClass()); /** * 自定义异常 */ @ResponseBody @ExceptionHandler(value = AusinessException.class) public ResultVO AHandler(AusinessException e) { logger.warn(e.getMessage()); return new ResultVO(e.getCode(),e.getMessage()); } /** * 通用异常 */ @ResponseBody @ExceptionHandler(value = BusinessException.class) public ResultVO AHandler(BusinessException e) { logger.warn(e.getMessage()); return new ResultVO(e.getCode(),e.getMessage()); } /** * @Description: AuthenticationException */ @ResponseBody @ExceptionHandler(value = AuthenticationException.class) public ResultVO CHandler(AuthenticationException e) { logger.warn(e.getMessage()); return new ResultVO(ResultCodes.CLIENT_PERMISSION_NOT_ALLOW); } /** * @Description: AuthenticationException */ @ResponseBody @ExceptionHandler(value = AccessDeniedException.class) public ResultVO DHandler(AccessDeniedException e) { logger.warn(e.getMessage()); return new ResultVO(ResultCodes.CLIENT_PERMISSION_NOT_ALLOW); } /** * @Description: 请求方法 */ @ResponseBody @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class) public ResultVO DHandler(HttpRequestMethodNotSupportedException e) { ResultVO resultVO = new ResultVO(); resultVO.setCode(ResultCodes.CLIENT_METHOD_NOT_MATCH.getCode()); resultVO.setMsg(e.getMessage()); return resultVO; } /** * @Description: @RequestBody 请求体解析问题 */ @ResponseBody @ExceptionHandler(value = HttpMessageNotReadableException.class) public ResultVO DHandler(HttpMessageNotReadableException e) { ResultVO resultVO = new ResultVO(); resultVO.setCode(ResultCodes.CLIENT_REQUEST_MESSAGE_NOT_READABLE.getCode()); resultVO.setMsg(e.getMessage()); return resultVO; } @ResponseBody @ExceptionHandler(value = Exception.class) public ResultVO errorHandler(Exception e) { e.printStackTrace(); logger.error(e.getMessage()); ResultVO resultVO = new ResultVO<>(); resultVO.setCode(ResultCodes.SERVER_ERROR); return resultVO; // return new ResultVO(ResultCodes.SERVER_ERROR); } /** * 处理入参异常 * @param e * @return */ @ResponseBody @ExceptionHandler(MethodArgumentNotValidException.class) public ResultVO handleMethodArgumentNotValidException(MethodArgumentNotValidException e){ logger.warn(e.getBindingResult().getFieldError().getDefaultMessage()); return new ResultVO(ResultCodes.SERVER_PARAM_NULL.getCode(),e.getBindingResult().getFieldError().getDefaultMessage()); } }