1. 程式人生 > >Java bean轉化為jsonObject異常

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、抵制不規範程式碼,別給後面的開發者埋雷!