首页 > 社交 > 科普中国

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

常驻编辑 科普中国 2022-05-30 异常   字段   路径   模块   接口   定义   状态   错误   消息   业务
字段描述具体错误,形如:P0z拜客生活常识网

INVALID_REQUEST
(
"InvalidRequest"
,
 
"Invalid request, for reason: {0}"
)

错误消息

对于 HTTP 请求而言,正确响应一般都伴随着2xx状态码,以及一个响应消息体。相应地,错误响应也理应有一个错误消息,以便 API 使用者能够知道错误原因,做出修正。当然,错误响应的响应状态码也是必不可少的,且原则上,应该尽可能地返回恰当的 HTTP 状态码,但这并不是我们本文讨论的重点,有兴趣的可以仔细阅读下 RFC 文档。至于错误消息,则没有一个特定的格式。P0z拜客生活常识网

我们定义错误响应的消息体如下:P0z拜客生活常识网

{

    
"requestId"
:
 
"5f8c89b6-f0d4-48d4-b945-01fbce035c0a"
,

    
"status"
:
 
400
,

    
"reason"
:
 
"Bad Request"
,

    
"code"
:
 
"NotFound"
,

    
"message"
:
 
"Resource Book[id=10] not found."
,

    
"details"
:
 
"uri=/books/10;client=0:0:0:0:0:0:0:1"
,

    
"timestamp"
:
 
"2018-10-16T23:30:40.431+08:00"

}

注:这里只做一个示例,讲述实践方法,具体的错误消息可以根据自己的需要定制。P0z拜客生活常识网

具体实现

继上述说明,我们接下来用代码说明具体如何实现。该项目为 Maven 多模块项目,文件结构如下P0z拜客生活常识网

P0z拜客生活常识网

对于一个大中型项目而言,通常我们可以把项目看做一个产品,而产品往往会根据业务分为不同的子模块。对于错误码的定义,通常会分为通用错误码、以及模块内的业务错误码。模拟一个大中型产品,我们这里将项目分为最基本的两个模块,一个代表公用模块,对于通用错误码、通用异常、通用异常处理以及对错误消息通用格式的定义等,我们都会在这个模块中实现。一个模拟的书店模块,依赖前面的公用模块。P0z拜客生活常识网

为尽量避免通篇大量的代码粘贴,我们在这里只介绍几个重要的文件,具体的实现细节,文章会在最后附上源码地址。P0z拜客生活常识网

公共模块

公共模块,或者叫通用模块,包括三个重要的子包, constanterrorweb,我们错误处理实现的主要代码就是在 error 包下。其中:P0z拜客生活常识网

ErrorCode 是一个接口,作为错误码枚举类型的父接口,其中只有两个方法P0z拜客生活常识网

public interface ErrorCode {
    String  getCode ();
    String  getMessage ();
}

CommonErrorCode 中定义通用错误码,作为产品各个子业务模块的公用部分,如P0z拜客生活常识网

 
/**

     * 错误请求

     */

    INVALID_REQUEST
(
"InvalidRequest"
,
 
"Invalid request, for reason: {0}"
),

    
/**

     * 参数验证错误

     */

    INVALID_ARGUMENT
(
"InvalidArgument"
,
 
"Validation failed for argument [{0}], hints: {1}"
),

    
/**

     * 未找到资源

     */

    NOT_FOUND
(
"NotFound"
,
"Resource {0} not found."
),

    
/**

     * 未知错误

     */

    UNKNOWN_ERROR
(
"UnknownError"
,
 
"Unknown server internal error."
);    

相关阅读:

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