首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SpringBoot如何全局统一处理异常?

接收某个粉丝的建议,以后给大家的文章,要么不写,要么就保证代码是能够阅读的,感谢这位粉丝。

今天和大家讨论的是SpringBoot如何统一处理异常。

这里先说一下为什么需要全局统一处理异常?

其实很简单,因为我们的程序在运行的过程中,不可避免的会产生各种各样的错误。比如说用户传过来的参数不正确,没有办法连接上数据库,在计算某个任务的时候发生了超时等。所以我们一般需要合理的抛出各种异常信息。这些异常信息,一旦不处理,前端就会得到一个500的服务器内部错误,非常的不友好,所以我们需要将这些异常捕获,并告知前端,出错了,到底错在了哪里。

另一个问题是,我们不能直接将完整的异常信息返回,因为可能涉及到一些内部的重要信息,不能随意的泄露,所以我们还需要对异常信息做过滤和转换,值给前端返回可读的,简洁的,准确的说明信息。

这就是为什么我们需要全局异常处理。

这里大鹏提供的一种思路是使用全局异常处理器。全局异常处理器不仅能够捕获默认的异常,还能够捕获各种自定义异常。一个简单的全局异常处理器代码如下:

这里我对所有的异常信息返回结果都做了统一的处理,只返回status,code,msg三个字段。在内部封装了一个getResult私有方法,便于统一处理,然后分别使用不同的方法处理不同的异常信息,比如Exception,HelloException。

这里的HelloException属于自定义异常,代码如下:

也比较简单,就是除了msg之外,还接收一个code,便于更加灵活的实现返回值数据。

最后,我编写了两个接单的接口进行测试,接口代码如下:

测试结果也比较令人满意。

第一个接口的返回值如下:

第二个接口的返回值如下:

可以发现,我们成功的捕获到了默认的Exception异常和自定义的HelloException异常,并统一处理了返回结果。

一:Java的源代码

二:一份Demo实现的完整笔记

关于我明明主要是玩Python和Golang的,为什么最近在更新Java这个问题,也可以声明一下,因为最近在教一个学生SpringBoot开发实战项目,在疯狂的备课,正好有很多手头资料可以分享,所以就整理成了公众号文章。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230326A020I200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券