• FastJson序列化部分字段的方法


    Maven FastJson

    引入 fastjson 的 Maven 依赖:

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.73</version>
    </dependency>
    

    FastJson 序列化依据

    FastJson 是根据 getter 方法来序列化的

    指定某些字段进行序列化

    • 只为需要序列化的字段生成 getter 方法,相反地,不希望序列化的字段就不生成 getter 方法
      • 缺点:有时候,虽然是不希望序列化的字段,但是代码中也是需要使用其 getter 方法的。
    • 假如Java Bean对象所有属性的 getter 方法都存在,还可以使用过滤器 SimplePropertyPreFilter 指定字段名称。(注意如果没有 getter 方法,过滤器中就算指定名称也不会生效)
      • 缺点:因为使用字符串来指定字段名称,所以如果类的属性名称修改了,这个地方的代码就会失效。
    SimplePropertyPreFilter filter = new SimplePropertyPreFilter(User.class, "name");
    String data = JSONObject.toJSONString(user, filter);
    

    排除某些字段

    假如Java Bean对象所有属性的 getter 方法都存在,我们还有一个思路,就是排除某些字段,不让这些字段参与序列化:

    • 可以通过 @JSONField(serialize = false) 阻止某些字段序列化

    关于是否需要添加默认构造函数的问题

    我自己测试了一下,假如没有默认构造函数:

    • 1.2.35 版本及以前版本,反序列化时会抛出 com.alibaba.fastjson.JSONException: default constructor not found. class test.fastjson.serialization.User
    • 1.2.36 版本及以后版本,即使没有默认构造函数也不会抛出异常,会去尝试寻找合适的构造函数,具体逻辑,先留个坑,以后再研究一下源码再说。

    参考文献

  • 相关阅读:
    AGC044D Guess the Password
    CF1290E Cartesian Tree
    loj2537. 「PKUWC2018」Minimax
    loj3166. 「CEOI2019」魔法树
    CF702F T-Shirts
    CF1260F Colored Tree
    CF1340F Nastya and CBS
    CF1017G The Tree
    CF150E Freezing with Style
    前端开发 -- HTML
  • 原文地址:https://www.cnblogs.com/kendoziyu/p/fastjson-serialize-specific-properties.html
Copyright © 2020-2023  润新知