package cn.timer.api.config.exception; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.validation.ObjectError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import cn.hutool.core.util.StrUtil; import cn.timer.api.aspect.lang.bean.ValidationError; import cn.timer.api.utils.Result; import cn.timer.api.utils.ResultUtil; /** * 全局异常处理器 * * @author Tang */ @RestControllerAdvice // @ControllerAdvice + @ResponseBody 组合注解 public class GlobalExceptionHandler { private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(Exception.class) public Result<Object> handleException(Exception e) { log.error(e.getMessage(), e); return ResultUtil.error(e.getMessage()); } /** * 空指针异常 * @param e * @return */ @ExceptionHandler(NullPointerException.class) public Result<Object> nullPointerException(NullPointerException e) { log.error(e.getMessage(), e); return ResultUtil.error(e.getMessage()); } /** * 类型强制转换异常 * @param e * @return */ @ExceptionHandler(ClassCastException.class) public Result<Object> classCastException(ClassCastException e) { log.error(e.getMessage(), e); return ResultUtil.error(e.getMessage()); } /** * 业务异常 */ @ExceptionHandler(CustomException.class) public Result<Object> businessException(CustomException e) { if (StrUtil.isBlank(e.getCode())) { return ResultUtil.error(e.getMessage()); } return ResultUtil.error(e.getCode(), e.getMessage()); } /** * io异常 */ @ExceptionHandler(IOException.class) public Result<Object> ioException(IOException e) { log.error(e.getMessage(), e); return ResultUtil.error(e.getMessage()); } /** * 自定义验证异常 */ @ExceptionHandler(MethodArgumentNotValidException.class) public Object validExceptionHandler(MethodArgumentNotValidException e) { // log.error("1--------"+e.getMessage()); // log.error("2--------"+JSONUtil.parse(e.getBindingResult().getAllErrors())); // String message = e.getBindingResult().getFieldError().getDefaultMessage(); // String field = e.getBindingResult().getFieldError().getField(); List<ObjectError> ls = e.getBindingResult().getAllErrors(); List<ValidationError> listVe = new ArrayList<ValidationError>(); ValidationError ve; for (ObjectError one : ls) { String fieldString = one.getCodes().length >= 1 ? one.getCodes()[0] : ""; if (fieldString != null) { fieldString = fieldString.substring(fieldString.lastIndexOf(".") + 1); } ve = ValidationError.builder().field(fieldString).msg(one.getDefaultMessage()).build(); listVe.add(ve); } return ResultUtil.error(listVe); } }