FastJSON 設置默認參數,全局配置方式 和 一些使用方式、坑


 

如果要被序列化的對象含有一個date屬性或者多個date屬性按照相同的格式序列化日期的話,那我們可以使用下面的語句實現:

在應用的的Main方法體里配置全局參數:

JSONObject.DEFFAULT_DATE_FORMAT="yyyy-MM-dd";//設置日期格式

 

或者使用時傳遞配置參數

JSONObject.toJSONString(resultMap, SerializerFeature.WriteMapNullValue,SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteDateUseDateFormat);

 

但是上面的解決方案面臨一個問題,如果不滿足上面的條件(多個date屬性,而且需要按照不定的格式序列化這些日期屬性),那么我們就需要另辟蹊徑,使用fastjson的特性來完成:

@JSONField(format="yyyyMMdd")
private Date date;

@JSONField(format="yyyy-MM-dd HH:mm:ss")
private Date date1;

 

如果希望DTO轉換輸出的是下划線風格(fastjson默認駝峰風格),請使用:

@JSONField(name="service_name")
private String serviceName;

 

FastJSON全局配置說明

  • SerializerFeature.PrettyFormat:格式化輸出
  • SerializerFeature.WriteMapNullValue:是否輸出值為null的字段,默認為false
  • SerializerFeature.DisableCircularReferenceDetect:消除循環引用
  • SerializerFeature.WriteNullStringAsEmpty:將為null的字段值顯示為""
  • WriteNullListAsEmpty:List字段如果為null,輸出為[],而非null
  • WriteNullNumberAsZero:數值字段如果為null,輸出為0,而非null
  • WriteNullBooleanAsFalse:Boolean字段如果為null,輸出為false,而非null
  • SkipTransientField:如果是true,類中的Get方法對應的Field是transient,序列化時將會被忽略。默認為true
  • SortField:按字段名稱排序后輸出。默認為false
  • WriteDateUseDateFormat:全局修改日期格式,默認為false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
  • BeanToArray:將對象轉為array輸出
  • QuoteFieldNames:輸出key時是否使用雙引號,默認為true
  • UseSingleQuotes:輸出key時使用單引號而不是雙引號,默認為false(經測試,這里的key是指所有的輸出結果,而非key/value的key,而是key,和value都使用單引號或雙引號輸出)

 

想要全局配置的話,請在Main方法體中設置:

//先執行static代碼塊,再執行該方法
//是否輸出值為null的字段,默認為false
JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteMapNullValue.getMask();
//數值字段如果為null,輸出為0,而非null
JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteNullNumberAsZero.getMask();
//List字段如果為null,輸出為[],而非null
JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteNullListAsEmpty.getMask();
//字符類型字段如果為null,輸出為 "",而非null
JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteNullStringAsEmpty.getMask()

暫時未找到xml方式的配置方法,/(ㄒoㄒ)/~~

 

同時上面紅色部分在Dubbo環境下,rpc數據序列化使用fastjson會有坑。

傳遞給下游的Bean對象里,如果類屬性是基礎數據包裝對象,比如Byte,fastson反序列化后會給該字段設置默認值0。

但你的本意是該屬性應該是null,結果卻是0。

對於程序開發來說0是有意義的數據,最終導致出現BUG、或者數據被0覆蓋更新。

切記切記,全局配置慎用!/(ㄒoㄒ)/~~

 

 

 

 

PS:

https://blog.csdn.net/qq_34120041/article/details/83114744

https://www.cnblogs.com/xd03122049/p/6079695.html

https://blog.csdn.net/john1337/article/details/76277617

https://blog.csdn.net/zjkyx888/article/details/78673898

https://blog.csdn.net/fly910905/article/details/78474813

 


免責聲明!

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



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