Java bean转化为jsonObject异常

本文剖析了JavaBean转换成JSONObject过程中出现的一个常见错误:由于误用get方法导致的转化失败。并给出了详细的错误分析及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值