接收某个粉丝的建议,以后给大家的文章,要么不写,要么就保证代码是能够阅读的,感谢这位粉丝。
今天和大家讨论的是SpringBoot如何统一处理异常。
这里先说一下为什么需要全局统一处理异常?
其实很简单,因为我们的程序在运行的过程中,不可避免的会产生各种各样的错误。比如说用户传过来的参数不正确,没有办法连接上数据库,在计算某个任务的时候发生了超时等。所以我们一般需要合理的抛出各种异常信息。这些异常信息,一旦不处理,前端就会得到一个500的服务器内部错误,非常的不友好,所以我们需要将这些异常捕获,并告知前端,出错了,到底错在了哪里。
另一个问题是,我们不能直接将完整的异常信息返回,因为可能涉及到一些内部的重要信息,不能随意的泄露,所以我们还需要对异常信息做过滤和转换,值给前端返回可读的,简洁的,准确的说明信息。
这就是为什么我们需要全局异常处理。
这里大鹏提供的一种思路是使用全局异常处理器。全局异常处理器不仅能够捕获默认的异常,还能够捕获各种自定义异常。一个简单的全局异常处理器代码如下:
这里我对所有的异常信息返回结果都做了统一的处理,只返回status,code,msg三个字段。在内部封装了一个getResult私有方法,便于统一处理,然后分别使用不同的方法处理不同的异常信息,比如Exception,HelloException。
这里的HelloException属于自定义异常,代码如下:
也比较简单,就是除了msg之外,还接收一个code,便于更加灵活的实现返回值数据。
最后,我编写了两个接单的接口进行测试,接口代码如下:
测试结果也比较令人满意。
第一个接口的返回值如下:
第二个接口的返回值如下:
可以发现,我们成功的捕获到了默认的Exception异常和自定义的HelloException异常,并统一处理了返回结果。
一:Java的源代码
二:一份Demo实现的完整笔记
关于我明明主要是玩Python和Golang的,为什么最近在更新Java这个问题,也可以声明一下,因为最近在教一个学生SpringBoot开发实战项目,在疯狂的备课,正好有很多手头资料可以分享,所以就整理成了公众号文章。
领取专属 10元无门槛券
私享最新 技术干货