[alibaba/fastjson]1.2.47 当@JSONType 中指定了typeKey, 反序列化时会丢失此typeKey之前的所有字段

2025-11-03 654 views
9
@JSONType(seeAlso = {FloorV2.class}, typeKey = "type")
public interface Area {
}

@JSONType(typeName = "floorV2")
public static class FloorV2 implements Area {
    public String type;
    public String templateId;
    public String name;
}

String json = "{\"type\":\"floorV2\",\"templateId\":\"x123\",\"name\":\"floorname2\"}";
Area  a=JSON.parseObject(json,Area.class);
System.out.println("name>>> " + a.name);

若json为 "{\"type\":\"floorV2\",\"templateId\":\"x123\",\"name\":\"floorname2\"}"时,反序列化完全正常

若json为"{\"name\":\"floorname2\",\"type\":\"floorV2\",\"templateId\":\"x123\"}";反序列化后,name字段为null

找到个类似的问题 #291

若我在FloorV2类中 设置@JSONType(... orders={"type","name","templateId"}) 或 设置type字段@JSONField(ordinal = -1) 想在反序列化的时候把type字段放在首位, 但是报如下错误:

com.alibaba.fastjson.JSONException
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:665)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:365)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:269)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:488)
    at com.mytest.jsontestMethod
Caused by: java.lang.NullPointerException
    at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:722)
    at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:271)
    at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:267)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:661)
    ... 38 more

回答

7

Same here for android

2

这个问题并没有得到解决,1.2.58依然会有这样的问题

9

这个问题并没有得到解决,1.2.58依然会有这样的问题

android 1.1.71并没有解决该问题

0

1.2.72 same