Java bean轉化為jsonObject異常
阿新 • • 發佈:2018-12-24
首先解釋下java bean轉化為JSONObject的過程(我之前並不知道,才會有這次bug的產生):
通過閱讀原始碼,你會發現,json包會掃描java實體類中的所有get方法,並且把所有的getXXX()方法都執行一遍!然後在內部執行new JSONObject操作建立一個新的jsonObject物件,通過各種resolver解析器把從get中獲取到的值都設定到這個jsonObject中,最後返回這個jsonObject物件。
這是我轉化失敗的實體類的錯誤部分:
//這段程式碼不是我寫的!!! public Class Xxbean { private Date time; public void setTime(Date time){ tihs.time=time; } public Date getTime(){ return this.time; } public String getDateTimeFormat(){ SimpleDateFormat formater=new SimpleDateFormat("yyyy-MM-dd"); return formater.format(time); } }
錯誤分析:
雖然getDateTimeFormat()方法我並沒有呼叫過,但在轉化為jsonObject時,json包會自動執行getDateTimeFormat()方法,根據駝峰命名法把dateTimeFormat當成bean一個屬性欄位,即自動生成一個dateTimeFormat欄位設定到jsonObject中返回。 而在SimpleDateFormat格式化時間時又沒有做異常處理,當time為null值時就會轉化失敗!然而我並沒有顯示地呼叫 getDateTimeFormat()方法 !解決方法是把這個方法刪掉就好了。
總結:
1、實體類要寫規範,不要寫無關的getXXX方法
2、SimpleDateFormat要慎用,用時要做異常處理
3、多讀原始碼,加強除錯能力
4、遇到出bug但控制檯沒把錯誤 資訊打印出來時,把日誌級別調為debug級別
5、抵制不規範程式碼,別給後面的開發者埋雷!