纪念一次由setter,getter致使JSON.toJSONString()丢失部分字段的坑

工作中遇到的问题随笔:

  • 1、问题的复现,字段丢失
  • 2、问题分析,查找原因
  • 3、找到原因,粗略剖析

1、问题的复现,字段丢失

这是一个比较老的项目,使用了fast-json-1.1.28.jar。在一次实际使用中,列表中始终无法显示其中2个字段,所以一步一步进行问题排查。

  • 1.使用debugger查看查询结果集,查询结果有值,说明sql,DAO层,service层都没有错。

    纪念一次由setter,getter致使JSON.toJSONString()丢失部分字段的坑_第1张图片

  • 2.查看发送到页面的json数据,通过日志查看,在经过JSON.toJSONString()的时候,这两个值丢了。

这里写图片描述

2、问题分析,查找原因

经过上面的排查,大概找到原因是,json转换字符串的时候,把这个字段弄丢了

  • 1.会不会是类型的问题?

       这个字段的类型是 Double的类型, 还有其他字段是Double的,比如上图中的sumRecord也是Double类型,在转换之后没丢,看来不是类型的问题。

  • 2.灵光乍现,会不会是没找到getter方法?

       虽然没有读过fastjson的源码,但是推测了应该是是用了反射,调用对象的getter方法取值,前往检查getter方法,查完感觉问题很有可能出现在这。 我的setter,getter方法用的MyEclipse自动生成,fScores的getter,自动生成的名为:getfScores(),这显然和平常的不一样。

这里写图片描述

  • 3.修改代码,再次检查,结果是如预期一样,问题解决了。

    纪念一次由setter,getter致使JSON.toJSONString()丢失部分字段的坑_第2张图片

3、找到原因,粗略剖析

因为我是使用了MyEclipse自动生成的setter,getter,工具应该严格遵守着一套命名规范,我应该再去查找学习学习。

  • 感慨

       在我以前的认知中, java的变量,都是驼峰命名,如:helloWorld,那么它生成的setter,getter方法就是,setHelloWorld(),getHelloWorld()。hWorld这样生成的时候,h不大写,依然小写。还有以前也了解过,is开头的setter,getter,是isSuccess()和getSuccess()。 有另类就有差异,有差异就会发生一些莫名其妙的问题,写写博客,记录一些自己遇到的莫名奇妙的问题,一点点进步,学习的道路孤独而坎坷,踽踽而行。

你可能感兴趣的:(日常问题记录)