统一Json的返回格式
在前后端分离的开发模式中,前后端之间使用Json进行通信。
可是这样会带来一个问题,Json格式可能会无法统一,比如成功时,返回SUCCESS和success等
所以在项目中,我们可以增加一个返回结果的实体类ResultEntity
这个类包含三个属性,String result, String message, T data
可以看到,我们这里使用到了泛型,为什么呢?
因为返回的数据是不确定的,为了不写成Object进行强转,我们一般使用泛型。
package top.bigking.crowd.util;
/**
* @Author ABKing
* @since 2020/3/15 下午9:39
**/
public class ResultEntity<T> {
public static final String SUCCESS = "SUCCESS";
public static final String FAILED = "FAILED";
//描述成功与否
private String result;
//返回的信息
private String message;
//返回的数据
private T data;
public static <E> ResultEntity<E> successWithoutData(){
return new ResultEntity<>(SUCCESS, null, null);
}
public static <E> ResultEntity<E> successWithData(E data){
return new ResultEntity<>(SUCCESS, null, data);
}
public static <E> ResultEntity<E> failed(String message){
return new ResultEntity<>(FAILED, message, null);
}
public ResultEntity() {
}
public ResultEntity(String result, String message, T data) {
this.result = result;
this.message = message;
this.data = data;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
这里略微涉及一下泛型的解释:
泛型可以让类型不在编译阶段确定,而在运行阶段确定,这样的好处是避免强制转换带来问题。如果不使用泛型,我们势必会使用Object,并在之后的代码中进行强制转换,这是不安全的。
举个例子:
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
我们查看List接口的源码,发现它是这样声明的:
public interface List<E> extends Collection<E>
接口中的add方法是这样写的:
boolean add(E e);
显然,使用泛型的好处就是能够在运行时确定类型,而不必写成Object
最后再写一下FormData如何转换成Json数据格式:
在实验过程中发现,console.log居然无法打印出FormData的数据
转成Json后,就可以正常打印。
const jsonData = {};
formData.forEach(((value, key) => {jsonData[key] = value}))
Json数据转换成FormData格式:
const formData = new FormData();
Object.keys(params).forEach((key) => {
formData.append(key, params[key]);
});