そのため、奇妙なエラーと思われる JsonMappingException を取得しています。
[ソース: java.io.StringReader@416a60a0; 行: 1、列: 947] (参照チェーン経由: >JobPush["CoTravellers"])
今、私が持っているのはこれです:
ProtocolContainer --> JobPush (inherits from DataPacket) --> Job --> CoTravellers
上記のエラーで言及されている JobPush は、DataPacket のサブクラスです。したがって、ProtocolContainer には 1 つの DataPacket があり、JobPush が 1 つである DataPacket を継承するいくつかのクラスがあります。
JobPush はシンプルで、次のようになります。
public class JobPush extends DataPacket
{
public Job Job;
}
CoTravellers フィールドが存在するのは Job-class であり、 JobPush ではありません。
public class Job implements Serializable
{
@JsonDeserialize(using=CustomMapCoTravellerDeserializer.class)
public Map<Objects.CoTravellers, Integer> CoTravellers;
// ....
}
ご覧のとおり、カスタム デシリアライザーを使用しようとしています (参照については、こちらを参照してください)。
JobPush に「CoTravellers」フィールドがないというエラーが表示される理由がわかりません。CoTravellers は Job-class 内にあるため、JobPush 内にあるとは決して言いませんでした。
私が解析している JSON は次のようになります (これはわかりやすくするために少しトリミングされています。ここで、SubPacket は変数名であり、この場合は JobPush である DataPacket を保持しています)。
"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
{
}