前言在业务逻辑中,通常使用两种方式处理异常:
返回错误码:优点是性能更好,但是不宜维护。抛出异常:可以使得代码更清晰,可读性更好,更符合面向对象。选择哪种需要根据场景而定,不管如何选择,只要团队达成共识,统一规范就可以。
下面介绍一下我使用的处理异常的方式。
自定义异常创建一个业务异常基类 baseexception extends runtimeexception ,为其添加两个属性:code 和 message ,并添加一些常用的构造方法。
其中, **code **的作用是储存错误码,在返回前台时将错误码返回给用户。
抛出异常:
错误码管理上面的自定义异常看起来很简单,但是不够优雅和简单。怎么将错误码和错误信息管理起来,是我们接下来要解决的问题。
我使用了 enum ,先创建一个接口,其中包含两个方法:
tocode():将枚举值转为 int 错误码,默认已实现;getmsg():获取枚举中的异常信息。
下面创建一个枚举类,实现上面的接口:
观察上面的错误码枚举类,我们发现,枚举值为 字母+错误码 ,属性 msg 为错误信息。
这样将错误码和异常信息统一管理起来之后,抛出异常的代码就可优化为:
然而这样依然不够优雅,代码量比之前还要长。要是能够只传枚举值一个参数就好了,那么我们继续优化。
创建一个异常类 businessexception extends baseexception (创建一个子类,用来接收枚举值),如下:
这样我们就可以优雅的抛出 businessexception 了:
如果想要保留原异常信息,还可以使用:
以上就是对异常处理的封装,使用时,只需要在每个业务模块中新建一个异常枚举类,用来统一管理异常;需要时,在代码中抛出 businessexception 即可。
统一异常处理最后,我们再使用 @controlleradvice 和 @exceptionhandler 注解做一下统一异常处理,它的作用是:
将业务异常打印到日志中将系统异常封装为 baseexception 进行返回,同样打印日志;这里也可以做其他操作,比如短信提醒等。代码如下:
管道监测压力传感器可减少泄漏造成的环境污染
基于Psoc6开发板的OLED时钟设计方案
工控主板应用范围
苹果Pro Display XDR显示器测试 到底值不值4万元
关于车载双通道USB充电芯片—MP5402M的性能分析和应用介绍
异常处理和错误码管理
街区的人流监控不可或缺
后区块链时代,数字货币将如何开辟一个新天地?
广州国际自动化技术及装备展丨工业自动化领域网卡抢先看
4线16线译码器真值表详情解析
高通骁龙435和麒麟655对比评测
影响跌落试验机检测精确性的因素有哪些
波峰焊后出现锡珠的原因是什么?
银锌蓄电池工作原理_银锌蓄电池用途
如何利用体感试衣镜来打造一个不一样的智能试衣间
Instagram开始正式发布其固定评论功能
焦点关注:贾跃亭兼职FF CEO,特斯拉缩短Model 3提车进入倒计时
HighFun嗨翻Party酒会圆满落幕 共享魔都狂欢之夜
基于CPLD和FIFO的多通道高速数据采集系统的研究
电动机保护器对提升机设备的保护范围