所以我得到了一个 JsonMappingException ,我认为这是一个奇怪的错误:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“CoTravellers”(JobPush 类),在 [Source: java.io.StringReader@416a60a0; 行:1,列:947](通过参考链:>JobPush["CoTravellers"])
现在,我所拥有的是:
ProtocolContainer --> JobPush (inherits from DataPacket) --> Job --> CoTravellers
上面错误中提到的 JobPush 是 DataPacket 的子类。所以,ProtocolContainer 有一个 DataPacket,我有几个继承 DataPacket 的类,其中 JobPush 是其中之一。
JobPush 很简单,如下所示:
public class JobPush extends DataPacket
{
public Job Job;
}
并且 CoTravellers 字段存在于 Job 类中,而不是 JobPush 中:
public class Job implements Serializable
{
@JsonDeserialize(using=CustomMapCoTravellerDeserializer.class)
public Map<Objects.CoTravellers, Integer> CoTravellers;
// ....
}
如您所见,我正在尝试使用自定义反序列化器(请参阅此处以供参考)。
现在,我无法理解为什么我会收到一条错误消息,提示 JobPush 中没有“CoTravellers”字段?我从来没有说过 CoTravellers 在 JobPush 中,因为它在 Job 类中。
我正在解析的 JSON 看起来像这样(为了清楚起见,这被裁剪了一点,其中 SubPacket 是变量名称,保存 DataPacket,在这种情况下是 JobPush):
"SubPacket":{
"__type":"JobPush:#DataPackets.ToVehicle",
"Job":{
"CoTravellers":[
{
"Key":{
"CoTravellerId":0,
"Name":"Medresenär"
},
"Value":1
}
]
}
}
有大佬能帮我介绍一下吗?=)
---- 编辑 1 ----
为了清晰起见,添加一些东西:
因此,类继承自“DataPacket”类,因此我使用了@JsonSubTypes 注释来处理它。这是 DataPacket 类:
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="__type")
@JsonSubTypes(
{
@JsonSubTypes.Type(value = JobPush.class, name = "JobPush:#DataPackets.ToVehicle"),
})
public class DataPacket
{
}