2023年11月29日发(作者:)
统⼀异常处理+错误编码设计⽅案
⼀、背景
1、系统在运⾏的时候可能会有下⾯这些种类的错误/失败发⽣:
(1) 依赖组件挂了,可能是 db,可能是 mq,可能是 cache。
在程序中使⽤枚举对错误编码进⾏存储。
3、如何获取
(1)系统bug级别的:直接在枚举中查看错误信息
(2)⾮系统bug级别的:设计单独的接⼝获取错误信息
综上所述:为了很好的扩展功能,建议设计单独的接⼝获取错误信息
4、具体编码设计
第1位(固定,⽤x标识,没有特殊设计含义,只是为了⽅便存储)
第2位(错误级别,1为⾮系统bug,2为系统bug需要改代码)
第3-4位(功能模块)
第5-8位(错误编码,从0001开始,依次顺延)
实例:x1010001
五、开发规范(在代码中使⽤“抛异常”还是“返回错误码”)
1、对于公司外的 http/api 开放接⼝必须使⽤“错误码”;⽽应⽤内部推荐异常抛出。
2、跨应⽤间 RPC 调⽤,优先考虑使⽤ Result ⽅式,封装 isSuccess()⽅法、“错误码”、“错误简短信息”。
(1)关于 RPC ⽅法返回⽅式使⽤ Result ⽅式的理由
使⽤抛异常返回⽅式,调⽤⽅如果没有捕获到就会产⽣运⾏时错误。
如果不加栈信息,只是 new ⾃定义异常,加⼊⾃⼰的理解的 error message,对于调⽤端解决问题的帮助不会太多。
如果加了栈信息,在频繁调⽤出错的情况下,数据序列化和传输的性能损耗也是问题。
(2)具体实现
统⼀返回结果展⽰,定义Result,封装 isSuccess()⽅法、“错误码”、“错误信息”。并提供ResultUtil⼯具类⽅便使⽤。
public class Result
public class ResultUtil {
public class CommonException extends RuntimeException{
@ControllerAdvice


发布评论