0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

异常处理和错误码管理

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-09-25 14:51 次阅读

前言

在业务逻辑中,通常使用两种方式处理异常:

  • 返回错误码:优点是性能更好,但是不宜维护。
  • 抛出异常:可以使得代码更清晰,可读性更好,更符合面向对象。

选择哪种需要根据场景而定,不管如何选择,只要团队达成共识,统一规范就可以。

下面介绍一下我使用的处理异常的方式。

自定义异常

创建一个业务异常基类 BaseException extends RuntimeException ,为其添加两个属性:code 和 message ,并添加一些常用的构造方法。

其中, **code **的作用是储存错误码,在返回前台时将错误码返回给用户。

图片

抛出异常:

图片

错误码管理

上面的自定义异常看起来很简单,但是不够优雅和简单。怎么将错误码和错误信息管理起来,是我们接下来要解决的问题。

我使用了 Enum ,先创建一个接口,其中包含两个方法:

  • toCode():将枚举值转为 int 错误码,默认已实现;
  • getMsg():获取枚举中的异常信息。

图片

下面创建一个枚举类,实现上面的接口:

图片

观察上面的错误码枚举类,我们发现,枚举值为 字母+错误码 ,属性 msg 为错误信息。

这样将错误码异常信息统一管理起来之后,抛出异常的代码就可优化为:

图片

然而这样依然不够优雅,代码量比之前还要长。要是能够只传枚举值一个参数就好了,那么我们继续优化。

创建一个异常类 BusinessException extends BaseException (创建一个子类,用来接收枚举值),如下:

图片

这样我们就可以优雅的抛出 BusinessException 了:

图片

如果想要保留原异常信息,还可以使用:

图片

以上就是对异常处理的封装,使用时,只需要在每个业务模块中新建一个异常枚举类,用来统一管理异常;需要时,在代码中抛出 BusinessException 即可。

统一异常处理

最后,我们再使用 @ControllerAdvice 和 @ExceptionHandler 注解做一下统一异常处理,它的作用是:

  • 业务异常打印到日志中
  • 系统异常封装为 BaseException 进行返回,同样打印日志;
  • 这里也可以做其他操作,比如短信提醒等。

代码如下:

图片

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    7639

    浏览量

    148494
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66767
  • 异常处理
    +关注

    关注

    0

    文章

    14

    浏览量

    7251
  • 储存
    +关注

    关注

    3

    文章

    184

    浏览量

    22283
收藏 人收藏

    评论

    相关推荐

    Linux错误码介绍

    处理一些程序出错语句中,不管是用户空间还是内核空间,通常都会返回一个错误码。例如`return -ERROR`。
    发表于 06-27 15:48 1611次阅读
    Linux<b class='flag-5'>错误码</b>介绍

    LabVIEW找不到错误码,USRP

    用LabVIEW操作NI USRP出现错误:The specified session handle is invalid or does not correspond to an active session.并且查不到该错误码-1074118640,求大神指教
    发表于 04-14 16:50

    最近做有限采样时总是出现“尝试读取的采样超出最终采集的采样”的错误错误码-200278

    最近做有限采样时总是出现“尝试读取的采样超出最终采集的采样”的错误错误码-200278,如下图有哪位大神给指点一下吧
    发表于 11-16 21:54

    共享变量忙碌 没有回应 错误码OX8BBB0005 跪求大神解答 急

    共享变量忙碌没有回应错误码OX8BBB0005跪求大神解答急
    发表于 04-02 19:17

    cRIO电流输出板卡9266,输出时返回错误码 65543是什么意思,如何解决?

    Node节点显示错误,运行返回错误码 65543,我查了下这个的解释是“The power supply voltage level is out of range. Check the supply
    发表于 03-23 21:50

    请问Vxworks remove 返回值 错误码 errno为0xb83dd0 表示什么意思?

    请问Vxworks remove 返回值 错误码 errno为0xb83dd0 表示什么意思?
    发表于 07-02 08:19

    Linux如何查看系统提供的错误码

    在用Linux下写C的代码的时候,利用open、create函数总是会出现错误但是返回值为 -1 ,并不能定位错误在哪里,所以查看系统提供的错误码就显得特别有必要了需要包含头文件并且定义一个 extern int errno 之
    发表于 07-05 07:31

    为什么ucosiii发送消息会显示错误码OS_ERR_INT_Q_FULL?

    ;TASK, P, 2, OS_OPT_POST_FIFO, &ERR); }}free(p);第一个可以发送出去消息,第二个就有错误错误码是OS_ERR_INT_Q_FULL;malloc
    发表于 10-08 06:47

    蓝牙低功耗BLE常见的几种断开错误码和原因分析

    低功耗蓝牙BLE常见的断开错误码有哪些呢?低功耗蓝牙BLE常见的断开原因有哪些呢?
    发表于 12-29 07:52

    采用CH573做蓝牙主的时候,连接断开后返回错误码怎么处理

    连接断开后返回的错误码代表上面意识,从那个手册可以看到,Disconnected...Reason:8
    发表于 07-28 07:26

    我运行程序遇到一个问题“error code is : 2”,在哪里可以查看各种错误码对应的信息?

    我运行程序遇到一个问题“error code is : 2”,在哪里可以查看各种错误码对应的信息
    发表于 09-18 06:17

    Oracle错误码大全

    Oracle错误码大全 ORA-00000 normal, successful completion Cause An operation has completed normally
    发表于 12-26 13:44 55次下载

    微辰金服新中付POS商户警惕这五个错误码

      POS机一旦提示错误码怎么办?微辰金服新中付POS商户警惕这五个错误码。  1、持卡人信用卡被刷拒付  2、因套码导致信用卡消费账单与实际消费地不同引发  3、转账业务刷拒付  4、同行竞争恶意
    发表于 03-29 16:06 259次阅读

    Bada系统学习-错误码(Error Codes)

    错误码是指在安装或者加载bada应用时发生错误时显示的编码.每个错误都有对应的错误码.这个编码是用于检查这个错误的原因.下图
    发表于 04-02 14:35 339次阅读

    C++异常机制解析

    传统排错 我们早在 C 程序里面传统的错误处理手段有: 终止程序,如 assert;缺陷是用户难以接受,说白了就是一种及其粗暴的手法,比如发生内存错误,除0错误时就会终止程序。 返回错误码
    的头像 发表于 11-09 14:16 163次阅读
    C++<b class='flag-5'>异常</b>机制解析