【Spring Boot 中 ResponseEntity 用法全解析】

ResponseEntity

  • [🌟 Spring Boot 中 ResponseEntity 用法全解析(含 body() 与 ok() 区别)](#🌟 Spring Boot 中 ResponseEntity 用法全解析(含 body() 与 ok() 区别))
  • 一、常用方法含义一览
    • [✅ 1. `ok()`](#✅ 1. ok())
    • [✅ 2. `notFound()`](#✅ 2. notFound())
    • [✅ 3. `badRequest()`](#✅ 3. badRequest())
    • [✅ 4. `noContent()`](#✅ 4. noContent())
    • [✅ 5. `internalServerError()`](#✅ 5. internalServerError())
  • [二、重点:created(URI) 讲清楚](#二、重点:created(URI) 讲清楚)
    • [🔹 created() 里面必须传什么?](#🔹 created() 里面必须传什么?)
    • [🔹 示例](#🔹 示例)
    • [🔹 为什么必须传 URI?](#🔹 为什么必须传 URI?)
  • [三、.body() 是干什么的?](#三、.body() 是干什么的?)
    • [🔹 是否可以不传参数?](#🔹 是否可以不传参数?)
  • [四、.body(user) 和 .ok(user) 的区别](#四、.body(user) 和 .ok(user) 的区别)
  • 五、终极理解总结
  • [🎯 一句话记住](#🎯 一句话记住)

🌟 Spring Boot 中 ResponseEntity 用法全解析(含 body() 与 ok() 区别)

在 Spring Boot 开发 REST 接口时,经常会看到:

java 复制代码
ResponseEntity.ok(user);
ResponseEntity.created(uri).body(user);
ResponseEntity.notFound().build();

很多人疑惑:

  • .body() 必须传参数吗?
  • .body(user).ok(user) 有什么区别?
  • created(uri) 里的参数到底是什么?

这篇文章直接讲重点。


一、常用方法含义一览

✅ 1. ok()

java 复制代码
ResponseEntity.ok(user);

表示:操作成功,并返回数据


✅ 2. notFound()

java 复制代码
ResponseEntity.notFound().build();

表示:资源不存在


✅ 3. badRequest()

java 复制代码
ResponseEntity.badRequest().body("参数错误");

表示:请求参数错误


✅ 4. noContent()

java 复制代码
ResponseEntity.noContent().build();

表示:操作成功,但不返回数据


✅ 5. internalServerError()

java 复制代码
ResponseEntity.internalServerError().body("服务器异常");

表示:服务器内部异常


二、重点:created(URI) 讲清楚

java 复制代码
ResponseEntity.created(uri).body(user);

表示:新资源创建成功


🔹 created() 里面必须传什么?

方法定义:

java 复制代码
created(URI location)

必须传入一个:

复制代码
java.net.URI

这个 URI 表示:

新创建资源的访问地址。


🔹 示例

java 复制代码
User user = new User(10L, "Lucy", 20);

URI uri = URI.create("/user/10");

return ResponseEntity.created(uri).body(user);

含义:

  • 新用户 ID 是 10
  • 以后可以通过 /user/10 访问
  • 同时把 user 对象返回

🔹 为什么必须传 URI?

因为 REST 规范中:

创建成功时,应告知客户端新资源的位置。

所以 created() 必须指定访问路径。


三、.body() 是干什么的?

java 复制代码
.body(data)

作用:

设置返回的数据。


🔹 是否可以不传参数?

方法签名是:

java 复制代码
.body(T body)

必须传参数。

如果不想返回数据,不要调用 .body()

而是调用:

java 复制代码
.build();

四、.body(user) 和 .ok(user) 的区别

这是很多人最困惑的地方。


写法一

java 复制代码
ResponseEntity.ok(user);

等价于:

java 复制代码
ResponseEntity.status(200).body(user);

这是一个快捷方法。


写法二

java 复制代码
ResponseEntity.status(200).body(user);

这是完整写法。


核心结论

复制代码
ResponseEntity.ok(user)

本质就是:

复制代码
ResponseEntity.status(200).body(user)

只是语法更简洁。


那为什么 created() 还要再调用 body()?

因为:

java 复制代码
ResponseEntity.created(uri)

只设置了"创建成功"状态,

还没有设置返回数据

所以必须再调用:

java 复制代码
.body(user)

五、终极理解总结

有数据返回:

java 复制代码
ResponseEntity.ok(data);
ResponseEntity.created(uri).body(data);
ResponseEntity.badRequest().body(msg);

无数据返回:

java 复制代码
ResponseEntity.notFound().build();
ResponseEntity.noContent().build();

🎯 一句话记住

  • .body() → 设置返回数据
  • .build() → 不返回数据
  • .ok(data) → 等价于 status(200).body(data)
  • .created(uri) → 只设置状态,必须再 .body().build()

相关推荐
小小前端仔LC29 分钟前
Node.js + LangChain + React:搭建个人知识库(六)- “吃什么”项目实战:从700+菜谱入库到Taro H5端JSON渲染
前端·后端
程序员黑豆1 小时前
AI全栈开发之Java:怎么配置Java环境变量
前端·后端·ai编程
苍何1 小时前
一手实测 Claude Fable 5,手搓了个 Obsidian 的 Codex 插件
后端
逍遥德2 小时前
MQTT教程详解-05.SpringBoot集成mqtt client 性能分析
java·spring boot·spring·mt
点燃大海2 小时前
SpringAI构建智能体
java·spring boot·spring·springai智能体
xier_ran2 小时前
【infra之路】02_RadixAttention与KV_Cache管理
java·spring boot·spring
swipe2 小时前
做多轮对话 Agent,为什么我建议把短期记忆放到 Redis
后端·面试·llm
码客日记2 小时前
Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)
java·spring boot·git
程序员黑豆2 小时前
AI全栈开发之Java:什么是JDK
前端·后端·ai编程
阿明在折腾3 小时前
从Canvas到AI模型:我在线工具站里的图片处理实战
前端·后端