在开发基于Spring Boot的应用程序时,统一结果封装是一个非常有用的技术,特别是在生产项目中,它可以帮助我们每个团队成员输出统一的结果格式,提高代码的可维护性和可读性。
一、封装作用
- 便于前端调用 在传统的开发中,接口返回的结果往往是各种形式的,包括不同的状态码、不同的数据格式等,这给前端开发和接口调用带来了一定的困扰。通过统一结果封装,我们可以定义一套统一的返回格式,包括状态码、消息和数据,使得前端人员调用更加方便。
- 减少后端开发量 通过统一结果封装,后端开发人员可以直接使用封装的结果类,减少重复的代码编写,提高开发效率,减少出错的可能性。
- 提高接口可维护性 统一结果封装可以使接口返回结果更加规范和易于理解,降低了接口变更对前后端代码的影响,提高了代码的可维护性和可读性。
二、封装实现
在Spring Boot应用中实现统一结果封装通常包括以下几个步骤:
1 创建统一结果封装类
首先,我们需要创建一个统一的结果封装类,用于包装接口返回的结果。这个类通常包括状态码、消息、数据和时间戳字段:
代码语言:javascript复制java 代码解读复制代码package com.one.pojian.entity.base;
import lombok.Data;
/**
* @description:结果统一封装
* @version: $
*/
@Data
public class Result {
private String code;
private String message;
private Object data;
private Long timeStamp;
public static Result initResult(ResultCode resultCode) {
Result result = new Result();
result.setCode(resultCode.getCode());
result.setMessage(resultCode.getMessage());
result.setTimeStamp(System.currentTimeMillis());
return result;
}
public static Result success() {
Result result = Result.initResult(ResultCode.SUCCESS);
return result;
}
public static Result success(Object data) {
Result result = Result.initResult(ResultCode.SUCCESS);
result.setData(data);
return result;
}
public static Result fail() {
Result result = Result.initResult(ResultCode.FAILURE);
return result;
}
public static Result fail(ResultCode resultCode) {
Result result = Result.initResult(resultCode);
return result;
}
}
2 状态枚举类
在统一结果封装中,通常会定义一个状态枚举类来表示接口返回结果的状态。这样可以统一管理接口返回的状态码和状态信息,提高代码的可读性和可维护性。
代码语言:javascript复制java 代码解读复制代码package com.one.pojian.entity.base;
import lombok.Getter;
@Getter
public enum ResultCode {
SUCCESS("00000", "请求成功"),
FAILURE("99999", "请求失败"),
EMPTY_PARAM("A0410", "请求必填参数为空");
private String code;
private String message;
ResultCode(String code, String message) {
this.code = code;
this.message = message;
}
}
三、调用测试
测试方法:
代码语言:javascript复制kotlin 代码解读复制代码@RequestMapping("/testFail")
public Result testFail() {
return Result.fail(ResultCode.EMPTY_PARAM);
}
测试结果
代码语言:javascript复制json 代码解读复制代码{
"code": "A0410",
"message": "请求必填参数为空",
"data": null,
"timeStamp": 1713352769949
}