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())
- [✅ 1. `ok()`](#✅ 1.
- [二、重点: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()