使用统一返回结果集的意义在于规范接口返回数据的格式,方便前后端交互和协作开发。通过约定一个统一的返回格式,可以大大减少前后端实现上的沟通成本,并且增强了代码的可维护性和可读性。
定义一个泛型类 ApiResponse
,表示API接口返回的响应数据。
@Data
public class ApiResponse<T> {
使用 Lombok 的 @Data
注解自动生成 Getter、Setter 和其他常见方法。T
表示泛型。
private final int code;
private final String message;
private final T data;
声明三个私有成员变量 code
、message
和 data
,分别表示响应码、消息和数据。
public ApiResponse(ResponseCode responseCode, T data) {
this.code = responseCode.getCode();
this.message = responseCode.getMessage();
this.data = data;
}
定义构造方法 ApiResponse
,接收两个参数 responseCode
和 data
,在构造对象时将 responseCode
中的响应码和消息赋值给 code
和 message
,将传入的 data
赋值给 this.data
。
public static <T> ApiResponse<T> success(T data) {
return new ApiResponse<T>(ResponseCode.SUCCESS, data);
}
定义静态方法 success
,接收一个 data
参数,该方法返回 ApiResponse
类型,其中调用构造方法 ApiResponse
,将响应码为 SUCCESS
和传入的 data
作为参数创建对象。
public static <T> ApiResponse<T> failed(ResponseCode responseCode) {
return new ApiResponse<T>(responseCode, null); // data为null
}
定义静态方法 failed
,接收一个 responseCode
参数,该方法返回 ApiResponse
类型,其中调用构造方法 ApiResponse
,将传入的响应码和 null
作为数据参数创建对象。
定义一个 Java 枚举类型 ResponseCode
,它包含 5 个常量:
每个枚举常量都有一个 int 类型的 code 和一个 String 类型的 message 属性,分别用于存储状态码和消息文本。在枚举类中,声明了一个构造函数来初始化枚举常量的属性,并提供了访问这些属性的方法 getCode()
和 getMessage()
。
@Data
public class ApiResponse<T> {
private final int code;
private final String message;
private final T data;
// 省略构造方法和Getter/Setter
public ApiResponse(ResponseCode responseCode, T data) {
this.code = responseCode.getCode();
this.message = responseCode.getMessage();
this.data = data;
}
public static <T> ApiResponse<T> success(T data) {
return new ApiResponse<T>(ResponseCode.SUCCESS, data);
}
public static <T> ApiResponse<T> failed(ResponseCode responseCode) {
return new ApiResponse<T>(responseCode, null); // data为null
}
}
public enum ResponseCode {
SUCCESS(200, "请求成功"),
INVALID_INPUT(400, "无效的输入"),
UNAUTHORIZED(401, "未经授权"),
NOT_FOUND(404, "未找到"),
INTERNAL_SERVER_ERROR(500, "服务器内部错误");
private final int code;
private final String message;
ResponseCode(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}