Java bean轉化爲jsonObject異常

     首先解釋下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、抵制不規範代碼,別給後面的開發者埋雷!
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章