Skip to content

统一响应结构

任何在 Controller 中返回的对象都会被自动包装为 Result<T>,业务代码无需手工 new 包装类。

Result 字段一览

字段类型含义
successBoolean整体成功标志
codeInteger业务状态码,约定 200 表示成功
messageString给前端展示或排查用的提示文本
dataT实际业务数据,可为 null

成功响应的标准形态:

json
{
  "success": true,
  "code": 200,
  "message": "操作成功",
  "data": { "id": 1, "name": "张三" }
}

失败响应的标准形态:

json
{
  "success": false,
  "code": 1003,
  "message": "业务处理异常: xxx",
  "data": null
}

静态工厂方法

如果你在某些场景下需要自己构造 Result(例如把已有错误码集中转换),使用静态工厂方法:

方法用途
Result.success(T data)成功响应,code=200,message=操作成功
Result.success()成功响应,无数据
Result.success(String message, T data)成功响应,自定义消息
Result.success(int code, String message, T data)成功响应,完整自定义
Result.fail(int code, String message)失败响应,自定义业务码
Result.error(String message)失败响应,code=500
Result.error(Integer code, String message)失败响应,自定义业务码

已是 Result 的对象不会被二次包装

如果 Controller 方法本身就返回 Result<T>,框架检测到后会直接放行,不会再包一层:

java
@GetMapping("/manual")
public Result<String> manual() {
    return Result.success("我自己包装好了");
}

不想要包装

两种选择:

  • 标 @RawResponse:完全跳过包装逻辑,返回原始数据
  • 标 @MyApiResponse:仍然包装为 Result,但 code / message / httpCode 由你指定

具体用法见 注解使用

框架不会包装的请求

下列路径与媒体类型会被白名单放行,避免把 Swagger 文档或静态资源也卷进包装逻辑:

  • /v3/api-docs/swagger-ui 系列、/knife4j/webjars//swagger-resources 前缀
  • /swagger-ui.html/doc.html/favicon.ico 精确路径
  • /assets//static//public/ 静态资源前缀
  • text/htmltext/cssapplication/javascript 媒体类型

实现细节与扩展方式见 设计文档 · 响应拦截器