美文网首页
json序列化误区

json序列化误区

作者: 修远路 | 来源:发表于2018-11-28 11:06 被阅读0次

之前一直以为后端接口序列化给前端的时候会去除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格式

相关文章

网友评论

      本文标题:json序列化误区

      本文链接:https://www.haomeiwen.com/subject/xgkaqqtx.html