SpringBoot异常处理以及对数据正确性的检查

一个项目中的异常处理是非常沉重的话题,每次做项目中如果异常处理的不好,轻微一点的会让测试人员找到你的问题,严重点的会把报错的日志打印给客户展示,这可能会造成比较严重的生产事故,那么我们该如何优雅的处理程序产生的异常呢?这就是我们接下来的话题。本文将会使用SpringBoot框架结合异常处理来和大家一起进行探讨。

我们需要思考的问题

在目前的前后端分离开发中,通常会去使用Swagger之类的接口工具去规范我们的接口,这时对于接口返回的状态(通常为success和error),都会在我们的接口文档中进行规范。所以,我们的全局异常处理及异常发生后给前端返回的错误信息,都要跟接口文档保持一致。

测试项目的建立

首先利用IDE工具,创建一个SpringBoot的项目,这里笔者采用IDEA来进行演示,需要引入的maven依赖如下:

此处除了ing的Web相关功能外还加入了JSR -303校验框架。

写一个Code类来定义成功和失败的返回码

再写一个Response类来定义接口返回的响应

写一个自定义的异常类MyException

接着再写一个全局异常处理器并且对我们的MyException进行处理

在Controller中模拟抛出业务异常

通过测试工具模拟请求接口

此处笔者使用的测试工具是DebugAPI。

编写实体类User,并且对username字段设置非空校验

在全局异常处理器中进行拦截

写一个UserController的控制器类

再次使用DebugAPI模拟请求

此时非常清楚地看到,我们的框架拦截到了该异常,并返回code码400,msg提示“用户名不能为空“。这对于前端及用户来说,都是非常直观的报警方式。前端接收到这个报错信息后可以非常优雅地进行处理并将结果返回给使用系统的客户。

我们的项目结构如下:

总结及收尾

对于程序中异常的处理方式有很多种,那么对于我们来说,只有适合自己的才是最好的。不要一味地去追求功能强大。能满足够用即可。那么大家在团队中都应该摸索出自己的一套异常解决方案。我们文章中提到的异常处理,只要一个最简单的Demo,那么对于业务中存在的异常,需要定义大量的业务错误码,甚至需要一个团队来专门对系统的异常进行单独操作。

此文起到一个抛砖引玉的作用,希望大家在开发中能发挥自己的想象力,努力做出适合自己的异常处理系统。