0

そのため、奇妙なエラーと思われる 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 
{
}
4

1 に答える 1

0

CoTravellerフィールドについて話しますが、JSONでは最後に「s」が付いたCoTravellersです。

于 2013-01-27T21:04:56.537 に答える