之前一直以为后端接口序列化给前端的时候会去除null值或者前端得不到null值的key,为此还与前端人员争论过,今天才发现我还是太年轻了。
现纠正我的一个误区,以作警戒:一直自以为对的可能本身就站不住脚,只有去尝试实践!
以谷歌的Gson为例,null值也可以参与序列化!!!
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* Gson工具类.
*/
public class GsonUtil {
/**
* Gson实例
*
* serializeNulls():null值也参与序列化
*/
private static final Gson GSON = new GsonBuilder().serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
private GsonUtil() {
throw new IllegalStateException();
}
public static <T> String toJSON(T t) {
return GSON.toJson(t);
}
public static <T> T toObject(String json, Class<T> clazz) {
return GSON.fromJson(json, clazz);
}
// 测试
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("id", UUID.randomUUID().toString());
map.put("name", null);
map.put("age", 20);
//assert: {"name":null,"id":"25adb038-3a10-4c00-9c39-2bc6a79c5a76","age":20}
System.out.println(GsonUtil.toJSON(map));
}
}
附:部分Gson构造器相关配置
new GsonBuilder() //实例构造器
.setFieldNamingPolicy(policy) //字段命名策略
.serializeNulls() //序列化空
generateNonExecutableJson() //生成不可执行前缀(用来防止攻击)
.setPrettyPrinting() //缩进打印
.setLenient() //宽松的容错性
.setDateFormat("yyyy-MM-dd HH:mm:ss"); //Date格式
网友评论