java异常链错误提示系统核心是保留原始原因、统一语义包装、结构化输出:自定义业务异常需继承runtimeexception并支持cause构造器,通过errorcode枚举驱动响应体生成,配合全局@exceptionhandler统一拦截与分级兜底,前端按code主动适配提示。

Java中利用异常链构建前后端分离的错误提示系统,核心在于“保留原始原因 + 统一语义包装 + 结构化输出”。它不是简单地抛异常,而是让每一次错误都携带可追溯的上下文、可翻译的业务码、可展示的动态文案。
用带 cause 的构造器封装异常链
所有自定义业务异常必须支持传入原始异常(cause),这是保留堆栈和根本原因的关键。不要丢弃底层异常信息,否则排查时只剩“业务处理失败”这种无意义描述。
- 统一继承 RuntimeException,避免受检异常污染调用链
- 每个异常类提供含
ErrorCode和Throwable cause的构造器 - 示例:
throw new BusinessException(ORDER_STOCK_INSUFFICIENT, "库存不足", e);
错误码驱动的响应体生成
前端不解析堆栈,只认 code 字段。后端需将 ErrorCode 映射为标准化 JSON 响应,message 可静态也可动态填充。
- ErrorCode 枚举中定义
code(如"ORDER_001")、template(如"订单{orderNo}状态非法") - 全局异常处理器中,用入参(如 orderNo)填充 template,生成最终 message
- 响应体始终包含:
code、message、traceId(用于日志串联)
全局拦截 + 分级兜底策略
不许在 Controller 里写 try-catch 返回 Result,所有异常由统一入口收口处理。
- 用
@RestControllerAdvice拦截BusinessException,返回友好业务错误 - 单独拦截
MethodArgumentNotValidException,转为VALIDATION_FAILED码 - 兜底捕获
Exception,记录完整堆栈+traceId,返回INTERNAL_ERROR,不暴露细节
前端按 code 主动适配提示
错误提示不能靠后端拼好再扔给前端,而要由前端根据 code 决定行为:
- code 以
VALIDATION_开头 → 提示在表单字段旁 - code 是
RESOURCE_NOT_FOUND→ 跳转 404 页面或清空列表 - code 为
INTERNAL_ERROR→ 显示“服务暂不可用”,并自动上报 traceId 到监控平台 - 关键操作失败(如支付)→ 弹窗强调 + 提供重试/联系客服按钮
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











