现在的项目是前后端开发的居多,那么,后端的开发只需要返回相关的接口就行了。那么,我们怎么定义接口返回的数据,怎么使用 Spring Boot 来统一处理返回的信息呢?
开发环境如下:
- IntelliJ IDEA 2021.2.2 (Ultimate Edition)
- macOS Monterey - Apple M1
- Java version - 17.0.7
- Spring Boot - 3.1.0
定义返回的信息格式
一个合理的信息返回格式,至少包含下面三个字段:
{
"code": "0",
"message": "请求成功",
"data": {
"name": "Jimmy"
}
""
}
code 表示返回的状态,我们这个可以自行定义,10000 代表成功; 20000 代表某某等;message 表示接口返回的信息,是否成功了,失败的理由是什么等;data 是表示请求成功后,返回的数据,可以是数组也可以是对象等。
信息返回格式,是否应该有其他字段,按照需求调整。
实践
我们使用 Spring Boot 来实践一下,通过 IDEA 新建一个名为 jimmy-response 的项目:
添加 lombok
Lombok 是一个插件,其主要的用途是提供了简单注释的形式来帮助我们简化消除一些必须有但是显得很臃肿的 java 代码,提高编码效率,使代码更加简洁。
pom.xml 中添加依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
如果并没有自动安装。点击 pom.xml 文件右上角同步图案即可。
定义返回的对象
我们在 ResultData.java 中定义返回的类:
// ResultData.java
package com.example.jimmyresponse;
import lombok.Data;
@Data
public class ResultData<T> {
private String code;
private String message;
private T data;
// 扩展字段,比如接口请求时间
private long accessTimestamp;
// 构造函数
public ResultData() {
this.accessTimestamp = System.currentTimeMillis();
}
// 成功返回
public static <T> ResultData<T> success(T data) {
ResultData<T> resultData = new ResultData<>();
resultData.setCode("10000");
resultData.setMessage(("请求成功!"));
resultData.setData(data);
return resultData;
}
// 失败返回
public static <T> ResultData<T> fail(String code, String message) {
ResultData<T> resultData = new ResultData<>();
resultData.setCode(code);
resultData.setMessage(message);
return resultData;
}
}
模拟数据
我们定义一个类来模拟用户的数据:
package com.example.jimmyresponse;
public class User {
public String name;
public User(String name) {
this.name = name; // 用户名
}
}
调用
最后,我们调用定义好的返回对象:
// ApiControll.java
package com.example.jimmyresponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApiController<T> {
@GetMapping("/")
public T getList() {
// 模拟用户数据
User users[] = {
new User("Jimmy"),
new User("Ivy")
};
return (T) ResultData.success(users); // 信息成功返回
}
}
结果的如下: