fastjson反序列化对象时限定JSONField

JSON.parseObject(s1, T.class);
JSON.parseArray(s1, T.class);

这两个方法在反序列化json字符串为Java Bean时,会从各个成员变量对应的setter函数设置各个成员变量的值。若成员变量的名称与json中的key不一样,可以使用JSONField往setter函数设置json中key,使之可以正确反序列化。

但是,如果该Bean有public构造函数,反序列化时只使用构造函数中的参数来设置值,并且会转换为驼峰去查找,若找不到就不赋值。

例如json中有key: data_type,Bean中有sensorDataType成员变量,有setSensorDataTye函数,有public构造函数,并且构造函数中有sensorDataType参数,此时即使往setSensorDataTye函数加上@JSONField(name = “data_type”),也无法正确反序列化时配置sensorDataType成员变量的值。此时若将构造函数中的sensorDataType参数改名为dataType,便可以正确在反序列化时赋值。为了使setter的JSONField生效,此时若将构造函数的public去掉,再添加一个无参构造函数,便可。

Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注