您现在的位置是:首页 > Javascript
当前栏目
异常处理实践 - 抛异常+错误码
2023-02-19 12:22:36 时间
哈喽,大家好,我是指北君。
今天和大家分享一下异常处理和错误码管理。
前言
在业务逻辑中,通常使用两种方式处理异常:
- 返回错误码:优点是性能更好,但是不宜维护。
- 抛出异常:可以使得代码更清晰,可读性更好,更符合面向对象。
选择哪种需要根据场景而定,不管如何选择,只要团队达成共识,统一规范就可以。
下面介绍一下我使用的处理异常的方式。
自定义异常
创建一个业务异常基类 BaseException extends RuntimeException ,为其添加两个属性:code 和 message ,并添加一些常用的构造方法。
其中, code 的作用是储存错误码,在返回前台时将错误码返回给用户。
抛出异常:
错误码管理
上面的自定义异常看起来很简单,但是不够优雅和简单。怎么将错误码和错误信息管理起来,是我们接下来要解决的问题。
我使用了 Enum ,先创建一个接口,其中包含两个方法:
- toCode():将枚举值转为 int 错误码,默认已实现;
- getMsg():获取枚举中的异常信息。
下面创建一个枚举类,实现上面的接口:
观察上面的错误码枚举类,我们发现,枚举值为字母+错误码,属性 msg 为错误信息。
这样将错误码和异常信息统一管理起来之后,抛出异常的代码就可优化为:
然而这样依然不够优雅,代码量比之前还要长。要是能够只传枚举值一个参数就好了,那么我们继续优化。
创建一个异常类 BusinessException extends BaseException (创建一个子类,用来接收枚举值),如下:
这样我们就可以优雅的抛出 BusinessException 了:
如果想要保留原异常信息,还可以使用:
以上就是对异常处理的封装,使用时,只需要在每个业务模块中新建一个异常枚举类,用来统一管理异常;需要时,在代码中抛出 BusinessException 即可。
统一异常处理
最后,我们再使用 @ControllerAdvice 和 @ExceptionHandler 注解做一下统一异常处理,它的作用是:
- 将业务异常打印到日志中
- 将系统异常封装为 BaseException 进行返回,同样打印日志;
- 这里也可以做其他操作,比如短信提醒等。
代码如下:
相关文章
- JDK中内嵌JS引擎介绍及使用
- 49195,npm最后的疯狂?盘点10款最有前途JavaScript构建工具
- 译文:5个增强Node.js应用程序增强功能
- 4个例子,吃透 JavaScript 实现的二叉搜索树 BST
- Vue中使用XML和JSON格式互转插件
- JDK中Jshell简单使用(JDK9版本以上或者JDK9版本)
- shiro中的JSP标签支持
- Java技术点-json转对象,对象转json
- SpringBoot+SpringDataJpa @Query之 JPQL使用书写模板(模糊查询and条件查询)
- Spring Boot中的Freemarker模版引擎引用css和js的正确姿势
- Node.js解压版的环境配置及相关常用命令
- JSP学习笔记(6)—— 自定义MVC框架
- JSP学习笔记(5)——Servlet、监听器、过滤器、MVC模式介绍
- Jsp学习笔记(4)——分页查询
- APIJSON简单使用
- JSP学习笔记(3)——JSTL 标签库
- JSP学习笔记(1)——Jsp指令、动作元素和内置对象
- JavaScript ES6 Promise对象
- Web前端——JavaScript扩展补充
- Web前端——表单提交和Js添加选项