java spring boot 全局异常捕获

@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统一返回体

这样子就可以在出现异常时返回前端 请求是否成功 错误信息和错误代码等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值