统一响应数据的封装
以前的响应数据格式不堪回首,在第一个项目中被怼就开始重视起格式了,然后网上找了些参考综合记下了笔记
1. 响应数据的格式
现在不会点前后端分离都不好意思,在分离的环境中,我们前后交互就显得尤为重要。前端按照接口文档中的URL地址和参数要求发送请求,接着后端对业务进行处理就响应约定格式的数据,这种约定的格式常见如下:
{
"code": "返回的状态码",
"msg": "返回的信息描述",
"data": "返回的数据"
}
- 后端一般返回 JSON格式的数据
1.1 状态码划分
当然这个 code 各自有不同的规范,可以参考HTTP的状态码进行区间划分
区间 | 表示的错误 |
---|---|
0000 | 表示响应成功 |
1000 ~ 1999 | 表示参数错误 |
2000 ~ 2999 | 表示用户错误 |
3000 ~ 3999 | 表示接口异常 |
4000 | 表示服务端错误 |
1.2 状态码的封装
我们常用枚举来进行状态码及其提示的统一封装,便于管理
public enum StatusCodeEnum {
SUCCESS("0000","成功"),
PARAM_TYPE_ERROR("1000","参数类型错误"),
USER_NOT_LOGIN("2001","用户未登录"),
USER_NOT_EXIST("2003","用户不存在"),
SERVER_ERROR("4000","服务端错误");
private String code;
private String msg;
public String getCode(){
return code;
}
public String getMsg(){
return msg;
}
private StatusCodeEnum(String code, String msg){
this.code = code;
this.msg = msg;
}
}
1.3 响应数据的封装
将数据统一封装成响应数据,简洁明了
@AllArgsConstructor
@Getter
@Setter
public class ResponseHelper {
private String code;
private String msg;
private Object data;
public ResponseHelper(StatusCodeEnum codeEnum, Object data) {
this.code = codeEnum.getCode();
this.msg = codeEnum.getMsg();
this.data = data;
}
public static ResponseHelper success() {
return new ResponseHelper(StatusCodeEnum.SUCCESS, null);
}
public static ResponseHelper success(Object data) {
return new ResponseHelper(StatusCodeEnum.SUCCESS, data);
}
public static ResponseHelper fail(StatusCodeEnum codeEnum) {
return new ResponseHelper(codeEnum, null);
}
public static ResponseHelper fail(StatusCodeEnum codeEnum, Object data) {
return new ResponseHelper(codeEnum, data);
}
}
- 笔者使用了Lombok,一定要加上@Getter、@Setter,因为JackJson需要用到
2. 统一数据返回
我们可以利用响应助手类将业务处理的数据快速封装起来并响应给前端
@RestController
public class EnumController {
@GetMapping("/enum1")
public ResponseHelper enumm1(){
return ResponseHelper.success();
}
@GetMapping("/enum2")
public ResponseHelper enumm2(){
return ResponseHelper.success(new Student());
}
@GetMapping("/enum3")
public ResponseHelper enumm3(){
return ResponseHelper.fail(StatusCodeEnum.SERVER_ERROR);
}
}
{"code":"0000","msg":"成功","data":null}
{"code":"0000","msg":"成功","data":{"name":null,"age":0}}
{"code":"4000","msg":"服务端错误","data":null}
- 这样就可以实现统一的响应数据的封装了