在實際專案中,往往使用json傳遞引數,若物件屬性為null,轉json字串會預設去掉該屬性,服務端強校驗會出錯。
com.alibaba
fastjson
1.2.7
public
class
user
implements
serializable
public
void
setname
(string name)
public string getaddress()
public
void
setaddress
(string address)
@override
public string tostring()
}
public
static
void
main
(string[
] args)
";// json.default_generate_feature |= serializerfeature.writemapnullvalue.getmask();
// user user = json.parseobject(data, user.class);
user user =
newuser()
; user.
setname
("***");
system.out.
println
(user)
; string s = json.
tojsonstring
(user)
; system.out.
println
(s);
}
結果如下:缺少了address屬性
傳入引數 serializerfeature.writemapnullvalue
public
static
void
main
(string[
] args)
";// json.default_generate_feature |= serializerfeature.writemapnullvalue.getmask();
// user user = json.parseobject(data, user.class);
user user =
newuser()
; user.
setname
("***");
system.out.
println
(user)
; string s = json.
tojsonstring
(user,serializerfeature.writemapnullvalue)
; system.out.
println
(s);
}
結果如下: address屬性為空也轉成json字串
注意:
這種方式也要在所有轉json的地方都要傳入這個引數,需要改動量大,我們可以考慮設定乙個全域性的變數:
public
static
void
main
(string[
] args)
總結:
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方法體中設定:
暫時沒有找到xml方式,切記切記,全域性配置慎用!/(ㄒoㄒ)/~~
//先執行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
()
Python函式預設引數設定
我們知道,在呼叫函式時,如果不指定某個引數,直譯器會丟擲異常。為了解決這個問題,python 允許為引數設定預設值,即在定義函式時,直接給形式引數指定乙個預設值,這樣的話,即便呼叫函式時沒有給擁有預設值的形參傳遞引數,該引數可以直接使用定義函式時設定的預設值。定義帶有預設值引數的函式,其語法格式如下...
es6函式預設引數與手動設定預設引數的區別
函式預設引數 之前我們不能直接為函式指定預設引數,因此很多時候為了保證傳入的引數具備乙個預設值,我們常常使用如下的方法 function add x,y console.log add 50這種方式並不是沒有缺點,比如當我傳入乙個x值為false 或運算子判斷為假的時候 這個時候任然會取到預設值,就...
python 預設引數 Python預設引數有坑?
最近有小夥伴在面試中遇到了 關於函式預設引數的坑 的題目,少數夥伴對此問題理得不是太清楚,今天匯智妹請到匯智動力高階教師鄧老師為大家詳細講解一下,幫助不太清楚的小夥伴清晰的梳理一遍。鄧老師本次主要從以下三點來講解 什麼是預設引數?函式預設引數的坑是什麼?函式預設引數為什麼會有坑?一 什麼是預設引數 ...