Skip to main content
Version: 中文

错误处理体系改进

问题分析

原有问题

  1. 混乱的错误码: 所有空指针异常都返回 402: "用户名错误"
  2. 不清晰的错误信息: 错误信息不能反映真实问题
  3. 缺少错误分类: 没有统一的错误码规范
  4. 空指针处理不当: 接口没有空值检查

解决方案

1. 创建统一错误码枚举 (ResultCode.java)

错误码分类

类别错误码范围说明
成功200操作成功
客户端错误4xx请求错误
认证错误401-408登录认证相关
数据错误41xx数据相关错误
文章错误42xx文章相关错误
服务器错误5xx服务器内部错误

2. 增强 Result 类

// 使用 ResultCode 返回成功
public static Result succ(ResultCode resultCode, Object data)

// 使用 ResultCode 返回失败
public static Result fail(ResultCode resultCode)

3. 完善全局异常处理器

改进空指针异常处理

之前:

return Result.fail(402, "用户名错误", null);  // ❌ 错误!

现在:

log.error("空指针异常,请检查数据是否存在", e);
log.error("空指针异常发生位置: {}", errorLocation);
return Result.fail(ResultCode.NULL_POINTER_ERROR,
"数据不存在或为空,请检查相关数据是否已配置", null);

错误响应示例

之前 (混乱)

{
"code": 402,
"msg": "用户名错误",
"data": null
}

现在 (清晰)

空指针异常

{
"code": 4103,
"msg": "数据不存在或为空,请检查相关数据是否已配置",
"data": null
}

用户名不存在

{
"code": 402,
"msg": "用户名不存在",
"data": null
}

文章不存在

{
"code": 4200,
"msg": "文章不存在",
"data": null
}

日志改进

之前

ERROR - 空值异常

现在

ERROR - 空指针异常,请检查数据是否存在
ERROR - 空指针异常发生位置: MiniProgrammeController.GetArticleBtmatter:157
WARN - 文章ID: 5 的作者ID: 999 不存在

总结

改进效果

方面改进前改进后
错误码混乱,不相关清晰,有分类
错误信息不准确准确反映问题
空指针处理全局返回"用户名错误"具体定位问题
日志信息简单详细的位置和上下文
可维护性困难容易定位和修复

改进日期: 2025-12-09 状态: ✅ 已完成 影响范围: 全局错误处理、所有Controller