Skip to content

错误响应协议

本文只写源码里已经存在的字段,加上 Spec 里尚未落地的扩展。旧表里的 10011303msg 字段名都不是 RespInfo 的实现。

当前 RespInfo

类:com.mdframe.forge.starter.core.domain.RespInfo

字段类型说明
codeInteger响应状态码
messageString响应消息。不是 msg
dataT响应数据。成功或失败都可能为 null
timestampLong构造时 System.currentTimeMillis()

@JsonInclude(NON_NULL),空字段不会出现在 JSON 里。

工厂方法(源码默认文案):

方法codemessage
success()200操作成功
success(data)200操作成功
success(message, data)200调用方传入
error()500操作失败
error(message)500调用方传入
error(code, message)调用方调用方
build(code, message, data)调用方调用方

当前 BusinessException

类:com.mdframe.forge.starter.core.exception.BusinessException

字段默认
code500
message无参构造是 业务处理异常
data可选

这是业务抛出的整数码 + 文案,不是稳定 errorKey。不要把某个业务模块随手写的 1001 登记成全局错误码表。

Spec 规划中的扩展

unified-error-diagnostics 还没有导出 forge-errors-manifest.jsonRespInfo 也还没有这些字段:

text
errorKey, traceId, help
help.cause, help.configLocations[], help.actions[], help.docsUrl, help.retryable

规划示例(现在的运行时不会返回):

json
{
  "code": 500,
  "errorKey": "START-DB-COLLATION-MIXED",
  "message": "数据库排序规则不一致,初始化失败",
  "help": {
    "cause": "目标数据库、表或字符串列混用了不同的排序规则。",
    "docsUrl": "/support/errors/database/START-DB-COLLATION-MIXED",
    "retryable": false
  },
  "traceId": "01J63Q5Q8KJ9M7A2E4T7W1X3YC",
  "timestamp": 1787623200000
}

首批 errorKey 清单见 故障排查中心,机器可读副本是 .docs/catalog/errors.yml

前端

errorKey 落地后再按编号跳转文档。现在只能展示 message,401/403 继续走现有登录跳转。不要根据文案关键词猜配置位置。

相关文档