异常处理实践 - 抛异常+错误码

网站建设4年前发布
39 0 0

哈喽,大家好,我是指北君。,今天和大家分享一下异常处理和错误码管理。,在业务逻辑中,通常使用两种方式处理异常:,选择哪种需要根据场景而定,不管如何选择,只要团队达成共识,统一规范就可以。,下面介绍一下我使用的处理异常的方式。,创建一个业务异常基类 BaseException extends RuntimeException ,为其添加两个属性:code 和 message ,并添加一些常用的构造方法。,其中, code 的作用是储存错误码,在返回前台时将错误码返回给用户。,2023030615160232bfb2c13fd04552d5199810e029e388c5fefe838,抛出异常:,202303061518007950b1327d0c0431a84232a0772eafac3cfd46848,上面的自定义异常看起来很简单,但是不够优雅和简单。怎么将错误码和错误信息管理起来,是我们接下来要解决的问题。,我使用了 Enum ,先创建一个接口,其中包含两个方法:,2023030615160492dd3665122aaa2227e454065a2807000d0a4a449,下面创建一个枚举类,实现上面的接口:,20230306151801282bc9c89d6041c65203840f74247a5dc771b5328,观察上面的错误码枚举类,我们发现,枚举值为字母+错误码,属性 msg 为错误信息。,这样将错误码和异常信息统一管理起来之后,抛出异常的代码就可优化为:,2023030615160619a73ef41fe5a0da1f5890922404dc6c3bcc86791,然而这样依然不够优雅,代码量比之前还要长。要是能够只传枚举值一个参数就好了,那么我们继续优化。,创建一个异常类 BusinessException extends BaseException (创建一个子类,用来接收枚举值),如下:,20230307014440c1f8a0703abb87910d1171f0ffaf8c825c31ef764,这样我们就可以优雅的抛出 BusinessException 了:,2023030615160706ae27b33df9f9e58640881f4f1a800da54b32693,如果想要保留原异常信息,还可以使用:,2023030615160782d1660362a320cee4f845f0b4d33b6f79933f842,以上就是对异常处理的封装,使用时,只需要在每个业务模块中新建一个异常枚举类,用来统一管理异常;需要时,在代码中抛出 BusinessException 即可。,最后,我们再使用 @ControllerAdvice 和 @ExceptionHandler 注解做一下统一异常处理,它的作用是:,代码如下:,2023030615160852cf0e1521be592428a65561243a20a8d1fb55762,2023030701444116316e9794a12e7e9e817986765ec88c3d64ed356,

© 版权声明

相关文章