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

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

例如下面的类:

public class User {
    private int age;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void getMyAge() {
        return age;
    }
}

使用 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 方法,并没有字段

com.alibaba.fastjson.JSONException: set property error, tableFields
	at com.alibaba.fastjson.parser.deserializer.FieldDeserializer.setValue(FieldDeserializer.java:162) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.parser.deserializer.ArrayListTypeFieldDeserializer.parseField(ArrayListTypeFieldDeserializer.java:71) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:1149) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:801) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:273) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:269) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_14_SqlDesc.deserialze(Unknown Source) ~[na:na]
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:269) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:758) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.serializer.ObjectArrayCodec.deserialze(ObjectArrayCodec.java:183) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_13_RuntimeContext.deserialze(Unknown Source) ~[na:na]
	at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:269) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:671) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:365) ~[fastjson-1.2.49.jar:na]
	at com.alibaba.fastjson.JSON.parseObject(JSON.java:269) ~[fastjson-1.2.49.jar:na]
	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的异常逻辑情况, 望修复

相关问题