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 版本及以后版本,即使沒有默認構造函數也不會拋出異常,會去嘗試尋找合適的構造函數,具體邏輯,先留個坑,以后再研究一下源碼再說。

參考文獻


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM