设计异常返回结构(Error / Exception Response)时,目标是:统一、可读、可追踪、可扩展。下面从设计原则 → 常见结构 → 示例 → 实践建议逐步说明。
{
"code": 400,
"message": "参数校验失败",
"detail": "用户名不能为空",
"requestId": "a1b2c3d4",
"timestamp": "2026-01-15T10:30:00Z"
}
| 字段 | 说明 |
|---|---|
code |
业务错误码(非 HTTP 状态码) |
message |
简短错误描述 |
detail |
详细原因(可选) |
requestId |
请求唯一 ID,用于排错 |
timestamp |
错误时间 |
| 场景 | HTTP Status | code |
|---|---|---|
| 参数错误 | 400 | 1001 |
| 未登录 | 401 | 2001 |
| 无权限 | 403 | 2002 |
| 资源不存在 | 404 | 3001 |
| 系统异常 | 500 | 9999 |
{
"code": 1001,
"message": "参数校验失败",
"errors": [
{
"field": "username",
"message": "用户名不能为空"
}
]
}
{
"code": 4001,
"message": "余额不足",
"detail": "当前余额 10,无法支付 50"
}
{
"code": 9999,
"message": "系统异常,请稍后重试",
"requestId": "req-123456"
}
{
"code": 9999,
"message": "NullPointerException",
"stack": "com.xxx.service.UserService.getUser(UserService.java:23)",
"requestId": "req-123456"
}
{
"code": 0,
"data": {
"id": 1,
"name": "Tom"
}
}
{
"code": 1001,
"message": "参数错误"
}
A-BB-CC
| 错误码 | 含义 |
|---|---|
| 1001 | 系统-通用-参数错误 |
| 2001 | 业务-用户-未登录 |
| 3001 | 权限-无访问权限 |
@ControllerAdviceAppError structAppError❌ 直接把异常抛给前端
❌ 返回 SQL 错误
❌ 成功和失败结构不一致
❌ 前端需要解析字符串才能判断错误
异常返回结构 = 统一格式 + 明确错误码 + 可追踪 + 不泄露敏感信息
如果你告诉我:
我可以给你可直接用的完整代码模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。