为了账号安全,请及时绑定邮箱和手机立即绑定

spring-boot 异常处理

标签:
SpringBoot

在项目中我们难免会遇到各种异常,
如何简单有效地捕获并记录这些异常变得非常重要

第一种全局异常处理方式

编写一个Controller接受请求,加入异常捕获方法

@RestControllerpublic class WebController {    @GetMapping("/login")    public String login() {        throw new NullPointerException("null pointer exception");
    }    //@ExceptionHandler捕获给定异常及其所有子类异常
    //给定的捕获范围可大可小,可以是Exception,也可以是某一具体异常例如NullPointerException
    @ExceptionHandler(value = Exception.class)    @ResponseBody
    public String exceptionHandler(Exception exception) {        return "find exception :" + exception.getMessage();
    }
}

webp

浏览器请求localhost:8080/login的结果

可以告诉大家的是,上面编写的exceptionHandler方法只能够捕获当前WebController发生的异常,那其他Controller发生的异常怎么办?难道要每一个Controller写一个异常捕获方法吗?答案是no!你可以写一个BaseController方法去做异常捕获的事情,然后让每一个Controller都去继承它,这样就可以实现全局异常捕获了。

但,有没有更好的方式能够做到全局异常捕获,因为Java只能单继承,只是为了实现异常捕获,就要把唯一的继承名额给用掉,未免有点可惜,那下面介绍另一种更为优秀的异常捕获方式。

第二种全部异常处理方式

编写一个类,加上@ControllerAdvice注解,编写异常捕获方法

@ControllerAdvicepublic class GlobalExceptionHandler {    
    @ExceptionHandler(value = Exception.class)    @ResponseBody
    public String globalExceptionHandler(Exception exception) {        return "global exception handler : " + exception.getMessage();
    }
}

把上文编写在WebController中的异常捕获方法注释掉,按照新的方式再试一下刚才那个请求,这样就不用把异常捕获方法写在每一个Controller中,或是编写一个BaseController实现异常捕获方法,让每个Controller都继承它来实现全局异常处理啦~

这一节内容就到这里,读者还可以持续关注笔者的springboot系列的其他文章哦。



作者:八目朱勇铭
链接:https://www.jianshu.com/p/e796883c105a

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消