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

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

哈喽,大家好,我是指北君。

今天和大家分享一下异常处理和错误码管理。

前言

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

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

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

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

自定义异常

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

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

图片

抛出异常:

图片

错误码管理

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

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

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

图片

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

图片

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

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

图片

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

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

图片

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

图片

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

图片

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

统一异常处理

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

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

代码如下:

图片

图片

责任编辑:武晓燕 来源: Java技术指北
相关推荐

2020-06-30 11:36:45

错误码合理开发

2017-09-05 14:59:34

2012-07-26 10:27:31

PHP

2017-11-20 11:53:38

CDN406错误故障

2023-02-02 08:56:25

线程池线程submit

2019-11-05 17:10:19

Java开发编程语言

2021-06-07 09:37:05

异常Bug排查

2018-02-06 09:05:25

Java异常处理代码

2017-06-02 10:25:26

Java异常处理

2013-08-22 17:10:09

.Net异常处理

2012-12-21 10:48:20

Java异常

2012-11-12 10:32:48

IBMdw

2018-07-11 19:41:47

MySQL定义异常异常处理

2023-12-11 14:19:00

Java程序异常

2013-04-01 09:39:06

JavaJava异常

2021-03-02 07:31:26

WebApiweb

2018-08-20 16:25:48

编程语言Java异常处理

2023-12-27 07:53:08

全局异常处理处理应用

2019-10-28 09:53:42

Java开发结构

2015-03-16 16:16:15

JavaJava异常处理Java最佳实践
点赞
收藏

51CTO技术栈公众号