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);
}
}
}