Java中通过封装类实现统一异常错误码管理,核心是定义枚举或常量类集中维护错误码,配合自定义异常类和统一响应结构,使业务抛出异常时自动关联可读、可追溯、可扩展的错误码。

Java 中通过封装类实现统一的异常错误码管理,核心是定义一个集中维护错误码的枚举或常量类,配合自定义异常类和统一响应结构,让业务代码抛出异常时能自动关联可读、可追溯、可扩展的错误码。
定义标准化错误码枚举
用 enum 封装所有业务错误码,每个枚举项包含 code、message 和可选的 HTTP 状态码。这样避免硬编码字符串或数字,支持 IDE 提示和编译期校验。
- code 建议采用层级命名(如 AUTH_TOKEN_EXPIRED、ORDER_NOT_FOUND),便于分类和排查
- message 保持简洁,面向开发人员(如“令牌已过期”),不暴露敏感信息
- 可增加 getHttpStatus() 方法,适配不同场景(如 401、404、500)
封装自定义业务异常类
继承 RuntimeException,构造函数接收错误码枚举,内部自动提取 code 和 message。避免每次 new 异常时重复传参。
- 提供带 cause 的重载构造方法,保留原始异常栈信息
- 添加 getCode() 和 getMessage() 方法,方便后续统一处理
- 不强制要求 try-catch,保持业务代码简洁(符合 RuntimeException 设计初衷)
统一异常处理器拦截并格式化响应
使用 @ControllerAdvice + @ExceptionHandler 捕获自定义异常,在返回前组装标准响应体(如 Result<T>),填入错误码、提示语和时间戳。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 区分系统异常(NullPointerException 等)和业务异常(BizException),前者记录日志并返回通用错误码(如 SYSTEM_ERROR)
- 响应体字段建议包含:code(int)、msg(String)、data(null)、timestamp(long)
- 可结合 Locale 或 Accept-Language 头做多语言提示(message 从 ResourceBundle 加载)
在 Service 层按需抛出,不侵入 Controller
业务逻辑中直接 throw new BizException(ErrorCode.ORDER_PAY_TIMEOUT),无需关心响应格式或 HTTP 状态。
- 避免在 controller 里写 if (xxx == null) throw new ...,把校验逻辑下沉到 service 或 validator
- DAO 层异常建议转换为业务异常(如 MyBatis 抛出 PersistenceException → 转为 DATA_ACCESS_ERROR)
- 第三方调用失败时,包装为明确语义的错误码(如 PAY_GATEWAY_TIMEOUT),而非直接透传下游错误
不复杂但容易忽略的是错误码的生命周期管理:上线后新增需同步更新文档、前端映射表和监控告警规则。建议搭配注释说明使用场景和修复建议,让错误真正成为协作语言的一部分。

















