当前位置: 首页 > 科技观察

异常处理实践——抛出异常+错误码

时间:2023-03-17 17:21:42 科技观察

大家好,我是北君。今天给大家分享一下异常处理和错误码管理。前言在业务逻辑中,通常有两种处理异常的方式:返回错误码:优点是性能较好,但不适合维护。抛出异常:它可以让代码更清晰,更易读,更面向对象。选择哪一个取决于场景。不管怎么选择,只要团队达成共识,统一规范就好。下面介绍一下我用来处理异常的方式。为自定义异常创建一个业务异常基类BaseExceptionextendsRuntimeException,为其添加两个属性:code和message,并添加一些常用的构造方法。其中code的作用是存储错误码,返回前台时将错误码返回给用户。抛出异常:错误码管理上面的自定义异常看似简单,但不够优雅和简单。如何管理错误代码和错误信息是我们接下来要解决的问题。我用的是Enum,首先创建一个接口,里面包含两个方法:toCode():将枚举值转换为int错误码,默认实现;getMsg():获取枚举中的异常信息。下面创建一个枚举类来实现上面的接口:观察上面的错误码枚举类,我们发现枚举值是一个字母+错误码,属性msg是一条错误信息。这样,将错误码和异常信息统一管理后,抛出异常的代码可以优化如下:但是,这样还是不够优雅,代码量也比以前长了。如果能只传枚举值一个参数就好了,那我们继续优化。创建一个异常类BusinessExceptionextendsBaseException(创建一个子类来接收枚举值),如下:这样我们就可以优雅的抛出BusinessException了:如果想保留原有的异常信息,也可以使用:以上是针对异常处理的封装,使用时只需要在每个业务模块中新建一个异常枚举类,统一管理异常;必要时,在代码中抛出BusinessException。统一的异常处理最后,我们使用@ControllerAdvice和@ExceptionHandler注解来做统一的异常处理。其作用是将业务异常打印成日志,将系统异常封装为BaseException返回,同时也打印日志;这里还可以进行其他操作,比如短信提醒等,代码如下: