java類是長這樣的
然後idea自動生成get和set方法
解析的字段都有值,就是isHit這個布爾沒有值是null
打印這個對象的toString方法
結果是:{faceId=‘90240’, repositoryId=‘null’, isHit=null, catchTime=‘2020-06-23 16:41:45’}
很奇怪爲什麼這個屬性(字段)沒有值呢?
百度搜索關鍵字:json boolean set get is
得到以下結果:
原因
- 因爲boolean值屬性沒有按照JavaBean規範進行命名。JavaBean規範這樣說:如果一個屬性是boolean值,假設名爲property,則其setter方法應該是setProperty,其getter方法應該爲isProperty。
- 當我們對isTest這個boolean類型的屬性使用Eclipse自動生成setter/getter方法時,其生成的getter方法時isTest,這樣的話,fastjson就會以爲這個屬性是test,從而輸出結果是test。
解決 - 方式1:規範boolean值命名,將isTest調整爲test,這樣其結果爲{“test”:false,”url”:true}
- 方式2:規範boolean值的getter方法,將isTest調整爲isIsTest方法,這樣其結果爲{“isTest”:false,”url”:true}
好吧,是idea生成的這個有問題,於是改成下面這樣,補充上Is
解析結果就正常了
{faceId=‘90240’, repositoryId=‘null’, isHit=true, catchTime=‘2020-06-23 17:47:54’}
總結:遇到一些字段爲isXxxx的布爾屬性,要特別留意get和set方法的名稱,要補齊,不然會出現bug