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