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

2024-10-16 754 views
0

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

回答

7

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

7

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

0

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

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

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

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

0

问题怎么解决呢