Spring Boot 入门:如何让接口返回 JSON 数据
大家好呀!上一篇文章我们一起学习了 Spring Boot 项目创建和第一个 GET 接口,不少小伙伴在私信说 “学会啦!想继续学怎么返回 JSON 数据”。今天这篇就来手把手教你 —— 从理解 JSON 是什么,到写出能返回用户信息、商品列表的接口,全程无难点,看完就能动手练!
一、先搞懂:为什么接口要返回 JSON?
在开始写代码前,我们先花 1 分钟搞懂一个关键问题:为啥大家都喜欢用 JSON 传数据?
简单说,JSON 是一种 “通用的数据格式”,不管是前端(Vue)还是后端(Spring Boot),都能轻松读懂它。比如我们要给前端传一个用户的信息,用 JSON 写出来是这样的:
{
"id": 1,
"name": "小明",
"age": 20,
"phone": "13800138000"
}
是不是比纯字符串清晰多了?而且结构灵活,既能传单个对象(比如一个用户),也能传列表(比如多个商品),这也是 JSON 成为接口数据首选格式的原因。好消息是:Spring Boot 早就帮我们做好了 “JSON 转换” 的工作,不用我们写复杂代码,只要按规则定义 “实体类”,接口直接返回对象 / 列表,Spring Boot 会自动把它转成 JSON!
二、准备工作:确认项目环境
因为是上一篇文章的进阶内容,我们直接在之前创建的「first-springboot-project」项目里操作就行,不用新建项目。
没创建项目的小伙伴可以回去看上一篇文章,5 分钟就能新建一个~
三、第一步:创建 “实体类”(关键!)
要返回 JSON 数据,首先得有 “数据模板”—— 也就是「实体类」。比如我们要返回用户信息,就需要一个「User」类,里面定义 “id、姓名、年龄” 这些字段;要返回商品列表,就需要一个「Product」类,定义 “商品 ID、名称、价格”。
1. 创建 User 实体类(单个用户信息模板)
步骤 1:新建实体类包
在左侧项目结构里,找到「com.example.firstspringbootproject」包,右键点击 → 「New → Package」,输入包名「entity」(表示 “实体类”,统一放这里方便管理),按回车。
步骤 2:创建 User 类
右键点击「entity」包 → 「New → Java Class」,输入类名「User」,按回车。然后粘贴下面的代码:
package com.example.firstspringbootproject.entity;
// 用户实体类:对应JSON里的“用户信息”结构
public class User {
// 字段1:用户ID
private Integer id;
// 字段2:用户姓名
private String name;
// 字段3:用户年龄
private Integer age;
// 字段4:用户手机号
private String phone;
// 添加“有参构造方法”(方便快速创建用户对象)
public User(Integer id, String name, Integer age, String phone) {
this.id = id;
this.name = name;
this.age = age;
this.phone = phone;
}
// 【必须】添加所有字段的“getter和setter方法”(Spring Boot 要通过这些方法获取和设置字段值)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
代码解释(重点看这 2 处):
-
字段定义:
private Integer id这些就是用户的属性,和 JSON 里的键(比如 “id”)一一对应; -
getter/setter 方法:每个字段的
getId()、setId()这些方法,是 Spring Boot 获取 / 设置字段值的 “通道”,少一个都不行。
2. 创建 Product 实体类(单个商品信息模板)
按同样的方法,在「entity」包下新建「Product」类,粘贴代码:
package com.example.firstspringbootproject.entity;
// 商品实体类:对应JSON里的“商品信息”结构
public class Product {
// 字段1:商品ID
private Integer productId;
// 字段2:商品名称
private String productName;
// 字段3:商品价格(用Double支持小数)
private Double price;
// 字段4:商品库存
private Integer stock;
// 有参构造方法(可选,方便创建商品)
public Product(Integer productId, String productName, Double price, Integer stock) {
this.productId = productId;
this.productName = productName;
this.price = price;
this.stock = stock;
}
// 所有字段的getter和setter(必须)
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public Integer getStock() {
return stock;
}
public void setStock(Integer stock) {
this.stock = stock;
}
}
小技巧:IDEA 自动生成 getter/setter
不用手动写 getter/setter!在实体类里右键 → 「Generate」(或按 Alt+Insert) → 选择「Getter and Setter」 → 勾选所有字段 → 点击「OK」,IDEA 会自动生成所有方法,省时又不会错~
四、第二步:写接口!返回 JSON 数据(2 种场景)
实体类准备好了,接下来就写接口 —— 我们分两种常见场景:返回单个 JSON 对象(一个用户)和返回 JSON 列表(多个商品)。
1. 场景 1:返回单个用户(单个 JSON 对象)
首先我们新建一个「JsonController」(跟HelloController区分开,分类管理更清晰)。
步骤 1:创建 JsonController
右键点击「com.example.firstspringbootproject.controller」包 → 「New → Java Class」 → 输入类名「JsonController」 → 粘贴代码:
package com.example.firstspringbootproject.controller;
import com.example.firstspringbootproject.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
// 还记得吗?这个注解表示返回数据(自动转JSON)
@RestController
public class JsonController {
// 接口1:返回单个用户(单个JSON对象)
// 访问路径:/user/single
@GetMapping("/user/single")
public User getSingleUser() {
// 创建一个User对象(用有参构造方法快速赋值)
User user = new User(1, "小明", 20, "13800138000");
// 直接返回User对象!Spring Boot会自动转成JSON
return user;
}
}
关键说明:
-
方法的返回值不再是
String,而是我们定义的User实体类; -
只要加了
@RestController注解,Spring Boot 就会自动把User对象转换成 JSON 格式返回,不用我们写任何转换代码!
2. 场景 2:返回商品列表(JSON 数组)
在「JsonController」里再加一个方法,返回多个商品的列表(用 List<Product> 作为返回值):
package com.example.firstspringbootproject.controller;
import com.example.firstspringbootproject.entity.Product;
import com.example.firstspringbootproject.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
// 还记得吗?这个注解表示返回数据(自动转JSON)
@RestController
public class JsonController {
// 接口1:返回单个用户(单个JSON对象)
// 访问路径:/user/single
@GetMapping("/user/single")
public User getSingleUser() {
// 创建一个User对象(用有参构造方法快速赋值)
User user = new User(1, "小明", 20, "13800138000");
// 直接返回User对象!Spring Boot会自动转成JSON
return user;
}
// 接口2:返回商品列表(JSON数组)
// 访问路径:/product/list
@GetMapping("/product/list")
public List<Product> getProductList() {
// 1. 创建List集合(用来装多个Product对象)
List<Product> productList = new ArrayList<>();
// 2. 往集合里加3个商品对象
productList.add(new Product(101, "华为手机", 3999.0, 100));
productList.add(new Product(102, "苹果平板", 5999.0, 50));
productList.add(new Product(103, "小米耳机", 299.0, 200));
// 3. 直接返回List!Spring Boot会自动转成JSON数组
return productList;
}
}
关键说明:
-
返回值是
List<Product>(表示 “Product 类型的列表”); -
Spring Boot 会把 List 转换成 JSON 数组,格式像这样:
[{}, {}, {}],每个{}就是一个商品的 JSON 对象。
五、第三步:运行测试!看 JSON 结果
代码写完了,和上一篇一样,运行项目然后测试接口~
1. 运行项目
找到「FirstSpringbootProjectApplication」启动类,点击绿色小三角运行(如果之前没关,直接重启就行)。控制台出现 “Started xxx in xxx seconds”,没有红色报错,就是运行成功。
2. 测试接口(用浏览器或 Apifox 都能测)
测试接口 1:返回单个用户(/user/single)
-
浏览器地址栏输入:
http://localhost:8080/user/single(如果改了端口,比如 8081,就用http://localhost:8081/user/single); -
按回车后,会看到返回的 JSON 数据:
{
"id": 1,
"name": "小明",
"age": 20,
"phone": "13800138000"
}
是不是和我们之前说的 JSON 格式一模一样?字段名(比如 “id”)就是实体类里的属性名,值就是我们赋值的内容。
测试接口 2:返回商品列表(/product/list)
-
浏览器地址栏输入:
http://localhost:8080/product/list; -
按回车后,会看到 JSON 数组(注意外面有
[]):
[
{
"productId": 101,
"productName": "华为手机",
"price": 3999,
"stock": 100
},
{
"productId": 102,
"productName": "苹果平板",
"price": 5999,
"stock": 50
},
{
"productId": 103,
"productName": "小米耳机",
"price": 299,
"stock": 200
}
]
3 个商品对象都在数组里,前端拿到这个数据,就能轻松展示成商品列表啦~
用 Apifox 测试
-
新建快捷请求,Method 选 GET,URL 输接口地址;
-
点击 Send,下方 Response Body 选择「Pretty」→「JSON」,就能看到格式化后的 JSON 数据,字段对齐,一目了然。
六、常见问题:返回 JSON 遇到的小坑
1. 接口返回 字段缺失?
检查字段有没有getter 方法:少一个 getter,对应的字段就不会出现在 JSON 里(比如 User 类少了 getName(),JSON 里就没有 “name” 字段)。
2. 想修改 JSON 里的字段名?(比如实体类是 productId,JSON 想显示 id)
- 在实体类字段上加
@JsonProperty("id")注解,比如:
@JsonProperty("id") // JSON里显示“id”,而不是“productId”
private Integer productId;
- 重新运行项目,接口返回的 JSON 里,商品 ID 就会变成 “id”:101。
七、总结:返回 JSON 其实很简单!
今天我们学会了 3 个核心知识点:
-
实体类是 JSON 的 “模板”:定义字段、getter/setter,就能对应 JSON 结构;
-
接口返回值直接写实体类 / List:Spring Boot 自动转 JSON,不用手动处理;
-
两种常见场景:单个对象(返回实体类)、列表(返回 List <实体类>),覆盖 80% 日常开发需求。
其实你会发现,Spring Boot 把复杂的 JSON 转换工作都 “藏起来” 了,我们只需要关注 “数据是什么样的”(实体类)和 “要返回什么数据”(接口方法),这也是 Spring Boot 受欢迎的原因 —— 简单、高效。
下一篇文章,我会教大家怎么 “接收前端传过来的参数”(比如前端传用户 ID,后端返回对应的用户信息),这也是接口开发的核心技能,感兴趣的小伙伴点个关注,下次更新不迷路!
如果操作中遇到问题,欢迎在评论区留言,我会一一回复~
6853

被折叠的 条评论
为什么被折叠?



