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

相关推荐
金牌归来发现妻女流落街头1 小时前
Lombok 真有问题吗?
spring boot·框架
+VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue动漫交流与推荐平台系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
大尚来也2 小时前
解决 IDEA 运行 Spring Boot 测试时“命令行过长”错误的终极方案
java·spring boot·intellij-idea
重生之后端学习2 小时前
98. 验证二叉搜索树
java·数据结构·后端·算法·职场和发展
qw102482 小时前
关于解决springcloud 创建bean失败的问题
后端·spring·spring cloud
用户298698530142 小时前
C# Word自动化:轻松插入特殊符号,告别手动烦恼!
后端·c#·.net
知其然亦知其所以然3 小时前
别再死记硬背!一篇讲透 Zookeeper 的 Watcher 机制
后端·zookeeper·面试
李慕婉学姐3 小时前
【开题答辩过程】以《智能小区物业管理系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·数据库·后端
m***06683 小时前
Spring Framework 中文官方文档
java·后端·spring