fastjson 解析以get 或set开头的方法,但是字段实际是不存在的,导致反序列化时报错

xzlaal3s  于 8个月前  发布在  其他
关注(0)|答案(5)|浏览(148)

例如下面的类:

  1. public class User {
  2. private int age;
  3. public int getAge() {
  4. return age;
  5. }
  6. public void setAge(int age) {
  7. this.age = age;
  8. }
  9. public void getMyAge() {
  10. return age;
  11. }
  12. }

使用 JSON.toJSONString() 时,会把 myAge 解析为字段,导致使用 JSON.parseObject 时报错。

具体就是这一行没有判断field是否为null
fastjson/src/main/java/com/alibaba/fastjson/util/TypeUtils.java

Line 1670 in 0c15a74

| | FieldInfofieldInfo = newFieldInfo(propertyName, method, field, clazz, null, ordinal, serialzeFeatures, parserFeatures, |

6mw9ycah

6mw9ycah1#

报错信息提供一下?

chy5wohz

chy5wohz2#

@wenshao
这是toJSONString之前的对象数据

这是转之后的String

这里的 tableFields 字段实际上是一个 getTableFields 方法,并没有字段

  1. com.alibaba.fastjson.JSONException: set property error, tableFields
  2. at com.alibaba.fastjson.parser.deserializer.FieldDeserializer.setValue(FieldDeserializer.java:162) ~[fastjson-1.2.49.jar:na]
  3. at com.alibaba.fastjson.parser.deserializer.ArrayListTypeFieldDeserializer.parseField(ArrayListTypeFieldDeserializer.java:71) ~[fastjson-1.2.49.jar:na]
  4. at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:1149) ~[fastjson-1.2.49.jar:na]
  5. at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:801) ~[fastjson-1.2.49.jar:na]
  6. at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:273) ~[fastjson-1.2.49.jar:na]
  7. at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:269) ~[fastjson-1.2.49.jar:na]
  8. at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_14_SqlDesc.deserialze(Unknown Source) ~[na:na]
  9. at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:269) ~[fastjson-1.2.49.jar:na]
  10. at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:758) ~[fastjson-1.2.49.jar:na]
  11. at com.alibaba.fastjson.serializer.ObjectArrayCodec.deserialze(ObjectArrayCodec.java:183) ~[fastjson-1.2.49.jar:na]
  12. at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_13_RuntimeContext.deserialze(Unknown Source) ~[na:na]
  13. at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:269) ~[fastjson-1.2.49.jar:na]
  14. at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:671) ~[fastjson-1.2.49.jar:na]
  15. at com.alibaba.fastjson.JSON.parseObject(JSON.java:365) ~[fastjson-1.2.49.jar:na]
  16. at com.alibaba.fastjson.JSON.parseObject(JSON.java:269) ~[fastjson-1.2.49.jar:na]
  17. at com.alibaba.fastjson.JSON.parseObject(JSON.java:488) ~[fastjson-1.2.49.jar:na]
展开查看全部
r8xiu3jd

r8xiu3jd3#

我之前也有这样的问题。
只要是get set开头的方法都会执行,不管有没有对应属性。
上次就因为起了一个getXxx 在里面进行了很多操作,导致序列化之后的对象属性已经不一样了。

thtygnil

thtygnil4#

我也碰到了相同的问题

atmip9wb

atmip9wb5#

同样遇到有get开头, 但是无field的异常逻辑情况, 望修复

相关问题