上次把原生json替換成了fastjson,發生很多地方不兼容,對這個也做了一些總結:
1、對於沒有賦值的變量處理,json-lib會根據類型給出相應初始值,而fastjson直接忽略這個字段。
解決方式:轉換時傳入兩個參數:SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty
加入WriteMapNullValue后,這個字段將不會被忽略,但是值是null,
加入WriteNullStringAsEmpty,將null改成空字符串。
針對數字、布爾類型,還有WriteNullNumberAsZero、WriteNullBooleanAsFalse等。
2、對於斜杠的處理,json-lib會將“/”轉義成“\/”,而fastjson保持原樣。
解決方式:如果要讓fastjson對於斜杠進行轉義,在轉換時傳入參數:SerializerFeature.WriteSlashAsSpecial。
3、fastjson的引用,當List里有多個元素的某些屬性值相同,后面元素的屬性會引用第一個元素的屬性,里面的值會寫成類似$ref:$.members[0].reportTo的形式,這樣可以減少數據量,但是有時候引用無法被識別。
解決方式:轉換時傳入SerializerFeature.DisableCircularReferenceDetect參數,關閉引用,結果和json-lib的方式相同。
4、對於getter方法的識別。tYbdm這樣的字段,用MyEclipse自動生成的get方法是gettYbdm,json-lib能夠識別,但fastjson不行。
解決方式:嚴格的駝峰命名方式,比如getTYbdm
或者在屬性上面加上@JSONField注解