Java bean转化为jsonObject异常

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/qq_37372007/article/details/81750736

     首先解释下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、抵制不规范代码,别给后面的开发者埋雷!
 

猜你喜欢

转载自blog.csdn.net/qq_37372007/article/details/81750736