核心是用分层映射表统一管理业务码语义,按模块(如user_code_map、order_code_map)和通用错误(common_code_map)分类;在响应拦截器中解析code字段,匹配映射并返回标准化结构;支持兜底策略、临时映射、风控日志及typescript类型校验。

在接口调用中处理复杂的业务状态码映射,核心是把后端返回的“业务码”(比如 2001、4005、5003)和前端可理解的语义行为(如“登录过期”、“库存不足”、“权限被拒”)精准对应起来,而不是只依赖 HTTP 状态码。
用分层映射表统一管理业务码逻辑
避免在每个请求后写一堆 if-else 判断业务码。建议按模块或场景建映射对象,例如:
-
用户模块:定义
USER_CODE_MAP,包含1001 → '用户名已存在'、1002 → '手机号已被绑定'等 -
订单模块:定义
ORDER_CODE_MAP,如3004 → '商品已下架'、3007 → '优惠券不可用' -
通用错误:单独抽离
COMMON_CODE_MAP,覆盖登录态失效(9999)、系统繁忙(9998)等跨域逻辑
封装统一响应拦截器自动触发处理
在 Axios 或 Fetch 封装层做一次解析,提取业务码 + 消息,并交由映射表匹配:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 检查响应体是否存在
code字段(注意不是status),并排除 HTTP 错误(如 4xx/5xx) - 根据接口路径或配置字段识别所属模块,选择对应映射表(例如
/api/user/register→ 用USER_CODE_MAP) - 查到匹配项后,返回标准化结构:
{ type: 'user_duplicate', message: '用户名已存在', action: 'retry' },便于上层决定弹窗、跳转或静默重试
支持动态 fallback 和可扩展提示策略
真实业务中总有未预定义的码,不能直接报“未知错误”:
- 为每个映射表设默认兜底规则,例如:以
4开头的码统一走“客户端参数错误”,带showToast行为;以5开头走“服务异常”,自动上报监控 - 允许在请求时传入临时映射项,比如某个活动接口返回了新码
8888,可在调用处 inline 补充:extraCodeMap: { 8888: { message: '活动已结束', action: 'redirect', to: '/activity' } } - 对需人工介入的码(如
9001“风控拦截”),不直接提示用户,而是记录日志+触发客服入口
结合类型系统提升维护性(TypeScript 推荐)
用 TypeScript 定义业务码类型,让 IDE 和编译器帮你发现遗漏:
- 声明
type UserErrorCode = 1001 | 1002 | 1003;,再定义const USER_CODE_MAP: Record<usererrorcode errorcodeconfig></usererrorcode> - 构建时扫描后端文档自动生成 TS 类型和映射表骨架(可用脚本解析 OpenAPI spec)
- 在 CI 中校验所有接口响应体中的
code是否都被映射表覆盖,缺失则警告
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










