json序列化误区

之前一直以为后端接口序列化给前端的时候会去除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  String toJSON(T t) {
        return GSON.toJson(t);
    }

    public static  T toObject(String json, Class clazz) {
        return GSON.fromJson(json, clazz);
    }

   // 测试
    public static void main(String[] args) {
        Map 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序列化误区)