@Slf4j
@Component
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public ApiResult defaultException(Exception e) {
log.info("未检查异常", e);
return ApiResult.err("服务器错误");
}
@ExceptionHandler(value = CustomException.class)
public ApiResult handlerCustomException(CustomException e) {
log.info("业务异常", e);
return ApiResult.err(e.getMessage());
}
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public ApiResult handlerMethodArgumentNotValidException(MethodArgumentNotValidException e) {
log.info("非法入参", e);
List<FieldError> errors = e.getBindingResult().getFieldErrors();
StringBuilder msg = new StringBuilder();
errors.forEach(error -> {
String errMsg = error.getDefaultMessage();
msg.append(errMsg).append(" ");
});
return ApiResult.err(msg.toString());
}
@ExceptionHandler(value = ConstraintViolationException.class)
public ApiResult handlerConstraintViolationException(ConstraintViolationException e) {
log.info("非法入参", e);
StringBuilder msg = new StringBuilder();
e.getConstraintViolations().forEach(error -> {
msg.append(error.getMessage()).append(" ");
});
return ApiResult.err(msg.toString());
}
}
@Slf4j是lombok框架带的注解
可以直接使用log打印日志
@ExceptionHandler中的value代表要捕获的指定异常
如果异常被try catch了 则不会被捕获到
CustomException是我自定义的异常 用来控制业务中出现异常
ApiResult是我自定义的Restful Api统一返回体
这样子就可以在出现异常时返回前端 请求是否成功 错误信息和错误代码等