Java企业级错误追踪体系通过异常链保留原始上下文、统一ErrorCode包装、全链路结构化输出实现可定位/翻译/响应;分层基类强制cause嵌入,全局处理器分级响应并填充业务参数,前端按code自治处理。

Java利用异常链构建企业级业务错误追踪体系,关键在于保留原始错误上下文 + 统一语义包装 + 全链路结构化输出。它不是为抛异常而抛,而是让每一次错误都可定位、可翻译、可响应。
设计分层异常基类,强制支持原因嵌入
所有自定义异常必须继承 RuntimeException,并提供含 ErrorCode 和 Throwable cause 的构造器。这样能确保底层技术异常(如 SQLException、FeignException)不被丢弃,又能向上透出业务语义。
- 基类中调用
super(message, cause),自动完成initCause()设置 - 禁止无参或仅含 message 的构造器——避免开发人员无意中切断链路
- 示例:抛出
new BusinessException(ORDER_STOCK_SHORTAGE, "库存不足", e),e 就是原始数据库异常
错误码驱动响应生成,动态填充业务上下文
前端不解析堆栈,只认 code 字段;后端用枚举统一管理错误码,每个码绑定模板和默认文案。
-
ErrorCode枚举包含字段:code(如 "ORDER_003")、template(如 "订单{orderNo}已超时")、level(提示/警告/阻断) - 全局异常处理器中,提取 Controller 入参(如 orderNo)、请求头(如 tenantId),填充 template 得到最终 message
- 响应体固定结构:
{"code":"ORDER_003","message":"订单ABC123已超时","traceId":"abc-xyz-789"}
全局拦截 + 分级兜底,杜绝散落的 try-catch
所有异常必须经由 @RestControllerAdvice 统一收口,按类型分级处理,不暴露技术细节给前端。
立即学习“Java免费学习笔记(深入)”;
- 捕获
BusinessException→ 返回 200 状态码 + 友好业务错误(code + 填充后 message) - 捕获
MethodArgumentNotValidException→ 转为VALIDATION_FAILED码,附带字段级错误信息 - 兜底捕获
Exception→ 记录完整堆栈 + traceId 到日志系统,返回INTERNAL_ERROR,message 固定为“服务暂不可用”
前端按 code 主动决策,实现错误行为自治
错误提示逻辑前移,后端只提供 code 和必要参数,前端根据 code 类型决定展示方式、交互动作与上报策略。
- code 以
VALIDATION_开头 → 渲染在对应表单控件旁,不弹窗 - code 为
RESOURCE_NOT_FOUND→ 清空当前列表,显示空状态页 - code 是
PAYMENT_TIMEOUT→ 弹确认窗,提供“重试”“查看订单”“联系客服”三按钮 - 所有 error 响应携带
traceId,前端自动上报至监控平台,关联用户操作日志

















