SpringBoot实现统一异常拦截

文章目录

在写项目时,程序运行时难免会有很多异常,为了不让用户看到报错,可能每个接口里都写有try-cache,这样的话既费事又不美观,当Controller接口特别多的时候,代码中就会充斥大量try-catch代码。

使用统一异常拦截,一旦项目中发生了异常,就会进入使用了RestControllerAdvice注解类中使用了ExceptionHandler注解的方法,我们可以在这里处理全局异常,将异常信息输出到指定的位置。并对所有的错误信息进行归置。
统一异常拦截就是将所有的异常都不展示给前端(用户),就像用淘宝,一旦报错,不会展示给用户异常的原因,顶多给用户一个提示语(“系统异常”)。

@ExceptionHandler,作用于方法,声明被注解方法是一个异常处理方法,value属性可以过滤拦截指定异常。
@RestControllerAdvice,作用于类,用于定义一个全局异常处理类,拦截所有restcontroller的异常,返回给前端的数据是json格式

@RestControllerAdvice
@Slf4j
public class ChatServiceExceptionAdvice {
    @ResponseBody
    @ExceptionHandler(Exception.class)
    public Result exceptionHandler(Exception e) {
        log.error("执行异常", e);
        if (e instanceof MethodArgumentNotValidException) {
            MethodArgumentNotValidException exception = (MethodArgumentNotValidException) e;
            return Result.getBusinessException(exception.getMessage(), ResponseStatus.BUSINESS_ERROR_STATUS.getCode());
        } else if (e instanceof ChatException) {
            ChatException exception = (ChatException) e;
            return Result.getBusinessException(exception.getMessage(), ResponseStatus.BUSINESS_ERROR_STATUS.getCode());
        }else if (e instanceof NullPointerException){
            NullPointerException exception=(NullPointerException)e;
            return Result.getBusinessException("空指针异常!",ResponseStatus.BUSINESS_ERROR_STATUS.getCode());
        }
        else {
            return Result.getBusinessException("后台异常,请联系管理员!", ResponseStatus.BUSINESS_ERROR_STATUS.getCode());
        }
    }
}


测试:
controller:

@RestController
@RequestMapping("/app")
public class AppController {

    @Autowired
    private UserService userService;

    @RequestMapping("/test")
    public void Test(){
        String a=null;

        if(a.equals("a")){
            System.out.println("hhhhh");
        }
    }
}

null调用equals会报空指针
在这里插入图片描述
可以看到,我的统一异常拦截成功拦截到了这个空指针异常

Controller中的异常,可通过@RestControllerAdvice和@ExceptionHandler来处理,@ExceptionHandler可捕获到Controller中抛出的指定异常。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值