zoukankan      html  css  js  c++  java
  • 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 版本及以后版本,即使没有默认构造函数也不会抛出异常,会去尝试寻找合适的构造函数,具体逻辑,先留个坑,以后再研究一下源码再说。

    参考文献

  • 相关阅读:
    231. Power of Two
    204. Count Primes
    205. Isomorphic Strings
    203. Remove Linked List Elements
    179. Largest Number
    922. Sort Array By Parity II
    350. Intersection of Two Arrays II
    242. Valid Anagram
    164. Maximum Gap
    147. Insertion Sort List
  • 原文地址:https://www.cnblogs.com/kendoziyu/p/fastjson-serialize-specific-properties.html
Copyright © 2011-2022 走看看