fastjson 1.2.57版本以后toJavaObject(JSON json, Class< T> clazz) 不调用字段的set方法进行赋值,而是使用反射方式对字段直接进行赋值

bnl4lu3b  于 2021-11-27  发布在  Java
关注(0)|答案(4)|浏览(363)

1.2.57版本以后toJavaObject(JSON json, Class clazz) 不调用字段的set方法进行赋值,而是使用反射方式对字段直接进行赋值
1:这么改的初衷是为了解决什么问题?
2:版本更新后,对于thrift生成javaBean使用fastjson转换后,在进行rpc的thrift协议调用会丢失所有int,long等类型的字段值

afdcj2ne

afdcj2ne1#

问题原因已经初步定位出来:
通过thrift生成的javaBean对象的set方法中包含了对isSet属性进行赋值true的地方,不通过对象的set方法进行赋值没办法去执行isSetXXX==true,导致传输的判断中判断该值为空,基础数据类型全部有此问题。望作者大大给予回复,能否提供一个合理的解决方案。

yhuiod9q

yhuiod9q2#

没看懂。。。
能否详细解释一下。

col17t5w

col17t5w3#

使用thrift生成的javabean文件,属性生成的对应方法除了get/set之外还有一个isSet方法,在基本类型的属性的Set方法中都会调用自己的isSet方法设置成true,代表此属性被赋值。如果在json转换bean的过程中不调用set方法进行赋值,就不会触发isSet为true,在经过thrift传输以后该属性值就会变成基本类型的默认值,导致数值的丢失。

p8h8hvxi

p8h8hvxi4#

在某些场景下,setXXX里除了赋值,会有些自定义操作(比如thrift框架里会补充设置bitmap)
是否有开关支持选择toJavaObject中使用setXX(filed) 还是直接赋值field.set(Object)

相关问题