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

    文章

    8575

    浏览量

    151015
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68524
  • 异常处理
    +关注

    关注

    0

    文章

    14

    浏览量

    7269
  • 储存
    +关注

    关注

    3

    文章

    200

    浏览量

    22370
收藏 人收藏

    评论

    相关推荐

    Linux错误码介绍

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

    嵌入式C编程常用的异常错误处理

    嵌入式C编程中,异常错误处理是确保系统稳定性和可靠性的重要部分。以下是一些常见的异常错误处理方法及其详细说明和示例: 1. 断言 (Assertions) 断言用于在开发阶段捕获程
    发表于 08-06 14:32

    LabVIEW找不到错误码,USRP

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

    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 416次阅读

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

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

    C++异常机制解析

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

    一站式统一返回值封装、异常处理异常错误码解决方案—最强的Sping Boot接口优雅响应处理

    1. 前言 统一返回值封装、统一异常处理异常错误码体系的意义在于提高代码的可维护性和可读性,使得代码更加健壮和稳定。统一返回值封装可以避免每一个接口都需要手工拼装响应报文;统一
    的头像 发表于 06-20 15:42 524次阅读

    CAN总线常见错误码及其解决方法

    错误码,这些错误码可以帮助我们诊断和解决问题。 1. 错误帧(Error Frame) 错误码 :当CAN控制器检测到一个帧的错误时,会发送
    的头像 发表于 11-12 10:05 1703次阅读

    串口通信中常见的错误码含义

    在串口通信中,常见的错误码及其含义对于诊断和解决通信问题至关重要。以下是一些常见的串口通信错误码及其解释: CE_BREAK :检测到中断信号。这通常意味着接收到的某个字节数据缺少合法的停止位
    的头像 发表于 11-22 09:26 605次阅读