package com.gkhy.testFourierSpecialGasMonitor.config.exception; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.gkhy.testFourierSpecialGasMonitor.commons.domain.ForeignResult; import com.gkhy.testFourierSpecialGasMonitor.commons.domain.Result; import com.gkhy.testFourierSpecialGasMonitor.commons.enums.ResultCode; import com.gkhy.testFourierSpecialGasMonitor.commons.exception.BusinessException; import com.gkhy.testFourierSpecialGasMonitor.commons.exception.DataReceiveException; import com.gkhy.testFourierSpecialGasMonitor.commons.exception.ExceptionInfo; import com.gkhy.testFourierSpecialGasMonitor.commons.exception.RepeatedClickException; 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; import java.time.format.DateTimeFormatter; @ControllerAdvice public class GlobalExceptionHandler { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @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; } /** * 通用异常 */ @ResponseBody @ExceptionHandler(value = DataReceiveException.class) public ForeignResult dataReceiveExceptionHandler(DataReceiveException e) throws JsonProcessingException { ExceptionInfo exceptionInfo = new ExceptionInfo(); LocalDateTime now = LocalDateTime.now(); exceptionInfo.setTime(now); exceptionInfo.setCode(e.getCode()); exceptionInfo.setMsg(e.getMessage()); exceptionInfo.setCauseClass(e.getCauseClass()); logger.error(objectMapper.writeValueAsString(exceptionInfo)); ForeignResult result = new ForeignResult<>(); result.setCode(e.getCode()); result.setTime(now.format(formatter)); if(e.getMessage() == null || e.getMessage().isEmpty()){ ResultCode code = ResultCode.prase(e.getCode()); if(code != null) result.setData(code.getDesc()); }else { result.setData(e.getMessage()); } return result; } /** * 重复点击异常 */ @ResponseBody @ExceptionHandler(value = RepeatedClickException.class) public Result repeatedClickExceptionHandler(RepeatedClickException e) throws JsonProcessingException { Result result = new Result(); result.setSuccess(); 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()); } }