JSONObject.toJSONString打印实体时发生空指针?

问题描述:

开发中经常会打印一些实体类的日志,方便问题追溯等,在一次实体类改动后发现JSONObject.toJSONString(实体类)发生了异常,导致其所在方法异常,by错误日志排查定位实体类中某个getXXX()方法空指针,注意,当前方法是get开头且无参的方法

问题排查:

首先疑问,为什么打印实体类会扫描到这个方法?往下追过源码,太多没看完..我猜测是把这个方法当成属性的get方法了?

随后去网上搜索,看到了这个文章

 随后本地进行测试,方法内增加了log,发现改名前会扫描到方法,将方法名修改(我把get换成了其他词汇)后就扫描不到了!又展开测试了下,除了方法名以'get'开头,是否还有其他影响因素呢?实体类内新增了一个get开头,但是有参数的方法,同样方法内打印了日志用于判断是否扫描执行了该方法,发现并未扫描到。

一些测试:

 控制台结果:

 2:

 

控制台结果: 

可见,只扫描了无参的getCycle方法,且返回值类型非void

问题总结:

综上,根据测试结果推测和建议,使用FastJson时,待解析的实体类内的方法一定谨慎命名,尤其是无参的get方法,可能是被当作属性的get方法了所以被扫描到,如果一定要这样命名,做好方法内的空值兼容,综合搜索和个人总结,以下是一些处理方式

1、用gson代替fastjson

2、使用fastjson,待解析实体类尽量避免get开头命名的无参方法

3、使用fastjson,不想被方法命名限制,方法内部做好空值兼容处理

参考文章

不要盲目的使用JSONObject.toJSONString_yeling3380222的博客-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值