首页 > 社交 > 科普中国

基于SpringBoot微服务开发中的异常处理最佳实践

常驻编辑 科普中国 2022-05-30 异常   字段   路径   模块   接口   定义   状态   错误   消息   业务

BusinessException 是产品业务层面错误处理的通用异常类,是一个非受检异常。 BusinessException 与系统默认异常最大的不同之处就是包含了一个 errorCode 属性。在业务中出错的地方,抛出一个携带有特定错误码的 BusinessException 异常,然后全局处理该异常类型,从其中解析构造出我们想要的错误消息,由 Spring 直接返回出去,即为一个符合我们要求的错误消息。P0z拜客生活常识网

CustomizedBaseExceptionHandler 继承自 org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler,从名称上也可以看出来, ResponseEntityExceptionHandler 是一个用于全局处理 RESTful 接口异常的处理器。通过在该类型及其子类型中添加使用 @ExceptionHandler 注解的方法,可以处理指定异常类型。P0z拜客生活常识网

ErrorDetails 自定义的错误消息体,可以根据自己的实际需要随意定制。P0z拜客生活常识网

业务模块

业务模块中,其他部分可以从略,我们关注这么几个类:P0z拜客生活常识网

BookStoreErrorCode 类是我们定义的与该业务子模块息息相关的错误码,举几个例子P0z拜客生活常识网


    /**
     * 虽然不推荐,但允许在模块中自定义新的错误码,而不去使用通用库中已经定义的 {@link CommonErrorCode#NOT_FOUND} 错误码
     */
    NOT_FOUND_BOOK("NotFoundBook", "Book {0} not found."),
    /**
     * 有如下两种定义错误码的思路:
     * 1. 定义宽泛的错误码,传入参数,如 Exists,传入 Book[id=1]
     * 2. 定义特定的错误码,如 InvalidBookId.Exists,不用传入参数
     * 

* 具体采用哪种,可以根据喜好来决定,个人更偏向于定义相对宽泛的错误码,上面的 {@link #NOT_FOUND_BOOK} 示例也类似 */ EXISTS("Exists", "The specified object {0} already exists."), INVALID_BOOK_ID_EXISTS("InvalidBookId.Exists", "The specified bookId already exists."); BookStoreErrorCode(String code, String message) { this.code = code; this.message = message; } /** * Customized error code */ private String code; /** * Error message details */ private String message; @Override public String getCode() { return "BookStore." + code; } @Override public String getMessage() { return message; }

很容易发现它与 CommonErrorCode 中定义的通用错误码的不同之处,那就是更偏向于具体业务了。此外还需要注意 getCode

相关阅读:

  • 为什么打开时油烟机里面会响
  • 电脑cpu温度多少正常(笔记本cpu异常高温怎么解决)
  • 异常有哪些(异常感染)
  • 手机dns在哪里设置(手机dns异常上不了网)
  • 鸡蛋是修复肝脏的“加速剂”?提醒:5种食物皆有助于肝脏
  • java获取真实ip及真实地址工具类
  • 怀孕多久去医院检查最好?
  • 如果你也出现这些睡眠障碍,那么你就要注意了
  • “华为”出现黑块,“柔软屏”很柔软?
  • 肝不好的时候,手和手指甲会有什么提示?中医养肝护肝的五
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。