【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()

相关推荐
毕业设计-小慧2 分钟前
计算机毕业设计springboot游戏数据管理系统 基于SpringBoot的电竞赛事数据管理平台 基于SpringBoot的在线游戏运营数据分析系统
spring boot·游戏·课程设计
zb2006412010 分钟前
CVE-2024-38819:Spring 框架路径遍历 PoC 漏洞复现
java·后端·spring
uzong18 分钟前
AI Agent 是什么,如何理解它,未来挑战和思考
人工智能·后端·架构
追逐时光者31 分钟前
DotNetGuide突破了10K + Star,一份全面且免费的C#/.NET/.NET Core学习、工作、面试指南知识库!
后端·.net
yuweiade1 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
ywf12151 小时前
springboot设置多环境配置文件
java·spring boot·后端
小马爱打代码1 小时前
SpringBoot + 消息生产链路追踪 + 耗时分析:从创建到发送,全链路性能可视化
java·spring boot·后端
小码哥_常1 小时前
MyBatis批量插入:从5分钟到3秒的逆袭之路
后端
jessecyj2 小时前
Spring boot整合quartz方法
java·前端·spring boot
二进制person3 小时前
JavaEE进阶 --Spring Framework、Spring Boot和Spring Web MVC(2)
spring boot·spring·java-ee