


























两种类型各有优缺点,我来对比分析:
| 维度 | int 类型 | String 类型 |
|---|---|---|
| 可读性 | ❌ 10001 不直观 | ✅ USER001 直观 |
| 扩展性 | ❌ 数字有限 | ✅ 字符灵活 |
| 模块区分 | ❌ 需要数字分段 | ✅ 前缀区分模块 |
| 前端判断 | ✅ 数字比较快 | ❌ 字符串比较稍慢 |
| 国际化 | ❌ 需额外映射 | ✅ 可直接作为 key |
| 存储空间 | ✅ 占用小 | ❌ 占用稍大 |
@Getter
public enum ErrorCode {
// 用户模块 10000-10999
USER_NOT_FOUND(10001, "用户不存在"),
USER_PASSWORD_ERROR(10002, "密码错误"),
// 订单模块 20000-20999
ORDER_NOT_FOUND(20001, "订单不存在"),
ORDER_STATUS_ERROR(20002, "订单状态异常");
private final Integer code;
private final String message;
}
响应示例:
{
"code": 10001,
"message": "用户不存在"
}
@Getter
public enum ErrorCode {
// 用户模块
USER_NOT_FOUND("USER001", "用户不存在"),
USER_PASSWORD_ERROR("USER002", "密码错误"),
// 订单模块
ORDER_NOT_FOUND("ORDER001", "订单不存在"),
ORDER_STATUS_ERROR("ORDER002", "订单状态异常");
private final String code;
private final String message;
}
响应示例:
{
"code": "USER001",
"message": "用户不存在"
}
理由:
看到 USER001 → 立刻知道是用户模块错误
看到 10001 → 需要查文档才知道是哪个模块
// String 类型 - 前缀区分
USER001, USER002, USER003 // 用户模块
ORDER001, ORDER002, ORDER003 // 订单模块
PAY001, PAY002 // 支付模块
// int 类型 - 数字分段,容易冲突
10001, 10002 // 用户模块?还是系统模块?
20001, 20002 // 订单模块?还是商品模块?
// String 类型可直接作为国际化 key
code: "USER001"
i18n.getMessage("USER001") → "用户不存在" (中文)
i18n.getMessage("USER001") → "User not found" (英文)
// int 类型需要额外映射
code: 10001
i18n.getMessage("error." + code) → 需要拼接
// String 类型可以随时加
PRODUCT_STOCK_NOT_ENOUGH("PRODUCT_STOCK_001", "库存不足")
// int 类型需要规划数字段,容易冲突
PRODUCT_STOCK_NOT_ENOUGH(40001, "库存不足") // 40000段够用吗?
| 公司 | 类型 | 示例 |
|---|---|---|
| 阿里 | String | BIZ001, USER001 |
| 腾讯 | String | ERR_USER_001 |
| 字节 | String | 10001(但用字符串存储) |
| 支付宝 | String | ACQ.TRADE_NOT_EXIST |
@Getter
public enum ErrorCode {
// ==================== 系统 SYS ====================
SUCCESS("0", "成功"),
SYSTEM_ERROR("SYS001", "系统异常"),
PARAM_ERROR("SYS002", "参数错误"),
// ==================== 用户 USER ====================
USER_NOT_FOUND("USER001", "用户不存在"),
USER_PASSWORD_ERROR("USER002", "密码错误"),
// ==================== 订单 ORDER ====================
ORDER_NOT_FOUND("ORDER001", "订单不存在"),
ORDER_STATUS_ERROR("ORDER002", "订单状态异常");
private final String code;
private final String message;
}
总结:推荐 String 类型,可读性、扩展性、国际化都更好。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。