package com.gkhy.labRiskManage.config.exception; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.gkhy.labRiskManage.commons.domain.Result; import com.gkhy.labRiskManage.commons.enums.ResultCode; import com.gkhy.labRiskManage.commons.exception.BusinessException; import com.gkhy.labRiskManage.commons.exception.ExceptionInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.core.AuthenticationException; 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.ResponseBody; import java.time.LocalDateTime; @ControllerAdvice public class GlobalExceptionHandler { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private ObjectMapper objectMapper; /** * 通用异常 */ @ResponseBody @ExceptionHandler(value = BusinessException.class) public Result businessExceptionHandler(BusinessException e) throws JsonProcessingException { ExceptionInfo exceptionInfo = new ExceptionInfo(); exceptionInfo.setTime(LocalDateTime.now()); exceptionInfo.setCode(e.getCode()); exceptionInfo.setMsg(e.getMessage()); exceptionInfo.setCauseClass(e.getCauseClass()); logger.error(objectMapper.writeValueAsString(exceptionInfo)); Result result = new Result(); result.setCode(e.getCode()); if(e.getMessage() == null || e.getMessage().isEmpty()){ ResultCode code = ResultCode.prase(e.getCode()); if(code != null) result.setMsg(code.getDesc()); }else { result.setMsg(e.getMessage()); } return result; } /** * @Description: AuthenticationException */ @ResponseBody @ExceptionHandler(value = AuthenticationException.class) public Result CHandler(AuthenticationException e) { logger.warn(e.getMessage()); return new Result(ResultCode.BUSINESS_ERROR_PERMISSION_DENIALED); } /** * @Description: AuthenticationException */ @ResponseBody @ExceptionHandler(value = AccessDeniedException.class) public Result DHandler(AccessDeniedException e) { logger.warn(e.getMessage()); return new Result(ResultCode.BUSINESS_ERROR_PERMISSION_DENIALED); } /** * @Description: 请求方法 */ @ResponseBody @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class) public Result DHandler(HttpRequestMethodNotSupportedException e) { Result resultVO = new Result(); resultVO.setCode(ResultCode.BUSINESS_ERROR_HTTP_METHOD_NOT_SUPPORT.getCode()); resultVO.setMsg(e.getMessage()); return resultVO; } /** * @Description: @RequestBody 请求体解析问题 */ @ResponseBody @ExceptionHandler(value = HttpMessageNotReadableException.class) public Result DHandler(HttpMessageNotReadableException e) { Result resultVO = new Result(); resultVO.setCode(ResultCode.PARAM_ERROR_ILLEGAL.getCode()); resultVO.setMsg(e.getMessage()); return resultVO; } @ResponseBody @ExceptionHandler(value = Exception.class) public Result errorHandler(Exception e) { e.printStackTrace(); logger.error(e.getMessage()); Result resultVO = new Result(); resultVO.setCode(ResultCode.SYSTEM_ERROR.getCode()); return resultVO; // return new ResultVO(ResultCodes.SERVER_ERROR); } /** * 处理入参异常 * @param e * @return */ @ResponseBody @ExceptionHandler(MethodArgumentNotValidException.class) public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e){ logger.warn(e.getBindingResult().getFieldError().getDefaultMessage()); return new Result(ResultCode.PARAM_ERROR, e.getBindingResult().getFieldError().getDefaultMessage()); } }