为啥需要统一封装传输到前端的数据信息
- 随着业务的增长,我们需要返回的数据类型会越来越多。如果按照正常的返回值类型把数据传输到前端,对于前端开发人员在解析数据的时候就比较凌乱了
- 因为前端接收到的数据格式太多了,这不便于前端人员的开发。
- 所以对于前端来说,如果后台能够返回一个统一的数据结果,前端在解析的时候就可以按照一种方式进行解析。开发就会变得更加简单,降低前端人员的开发能力。
如何统一封装传输到前端的数据信息
- 创建一个模型类:
-
- 把操作的结果(即操作是否成功)封装到code属性中。
-
- 把操作的返回数据(即操作是否成功)封装数据到data属性中
-
- 把操作失败的信息(产生错误的原因啊、异常啊等等的特殊信息)封装到message(msg)属性中
-
public class Result{
private Object data; //封装数据
private Integer code; //封装返回结果
private String msg; //封装异常信息等等
}
注意:Result类名及类中的字段并不是固定的,还可以根据需要自行增减提供若干个构造方法,方便操作。
Result类:这里的code属性,需要使用到一个常量类。
@Data
public class Result {
private Object data;
private Integer code;
private String msg;
public Result() {
}
// 操作成功的方法
public Result(Integer code,Object data) {
this.data = data;
this.code = code;
}
// 操作失败的方法
public Result(Integer code, Object data, String msg) {
this.data = data;
this.code = code;
this.msg = msg;
}
}
Code常量类:(根据需求进行封装)
public class Code {
public static final Integer SAVE_OK = 2010; //添加操作成功
public static final Integer DELETE_OK = 2020; //删除操作成功
public static final Integer UPDATE_OK = 2030; //修改操作成功
public static final Integer GET_OK = 2040; //查询操作成功
public static final Integer SAVE_ERR = 20011; //添加操作失败
public static final Integer DELETE_ERR = 20021;//删除操作失败
public static final Integer UPDATE_ERR = 20031;//更新操作失败
public static final Integer GET_ERR = 20041;//查询操作失败
public static final Integer SYSTEM_ERR = 3001; //系统异常
public static final Integer SYSTEM_TIMEOUT_ERR = 3002;//系统超时
public static final Integer SYSTEM_UNKNOW_ERR = 3003; //系统发生不知道的异常
public static final Integer BUSINESS_ERR = 60002; //发生自定义异常
}
另一种Result的展示:
/**
* 后端统一返回结果
* @param <T>
*/
@Data //这个注解表示:getter、setter、toString、equals,hashCode等操作的快速添加。
public class Result<T> { //T是泛型,就是要返回的结果数据的类型,也可以不写,不写就表示Object
private Integer code; //编码:1成功,0和其它数字为失败,也可以另外定义一个code的常量类,指定哪个code代表什么含义
private String msg; //错误信息
private T data; //数据
//操作成功则不需要传入msg属性
public static <T> Result<T> success() {
Result<T> result = new Result<T>();
result.code = 1;
return result;
}
public static <T> Result<T> success(T object) {
Result<T> result = new Result<T>();
result.data = object;
result.code = 1;
return result;
}
//操作失败则需要传入msg属性,说明发生了什么bug
public static <T> Result<T> error(String msg) {
Result result = new Result();
result.msg = msg;
result.code = 0;
return result;
}
}