spring boot 异常统一处理
使用@ControllerAdvice注解,全局捕获异常类,只要作用在@RequestMapping上,所有的异常都会被捕获
@ControllerAdvice
public class ExceptionHandlerAdvise {
private Logger logger = LoggerFactory.getLogger(ExceptionHandlerAdvise.class);
@ExceptionHandler
@Order(Ordered.LOWEST_PRECEDENCE)
public ResponseEntity<RespDTO> handleException(Exception e) {
logger.error("global error occur", e);
//是否自定义异常类型
if (e instanceof ServiceException){
return new ResponseEntity<RespDTO>(RespDTO.fail(((ServiceException) e).getErrorMessage()), HttpStatus.OK);
} else if(e instanceof MethodArgumentNotValidException){ //是否lombok 注解校验异常
List<String> errMsgs = new ArrayList<>();
for(FieldError error : ((MethodArgumentNotValidException) e).getBindingResult().getFieldErrors())errMsgs.add(error.getDefaultMessage());
return new ResponseEntity<RespDTO>(RespDTO.fail(StringUtils.join(errMsgs)), HttpStatus.OK);
} else{ //统一处理的异常
return new ResponseEntity<RespDTO>(RespDTO.fail("操作失败"), HttpStatus.OK);
}
}
}