如何使用兄弟对象属性的属性执行对象的json反序列化?

时间:2020-04-03 09:37:37

标签: java json jackson json-deserialization polymorphic-deserialization

我有一个Transport.java类

public class Transport {
    private TransportDetails transportDetails;

    @JsonTypeInfo(use = Id.NAME, include = As.EXTERNAL_PROPERTY, property = "transportType")
        @JsonSubTypes({
            @Type(value = PublicTransport.class, name = "Public"),
            @Type(value = PrivateTransport.class, name = "Private")
        })
    private TransportMode transportMode;
    ...
}

TransportDetails.java的定义如下:

public class TransportDetails {
    private String transportType;
    private String transportCost;
    private String transportDurationInMins;
    ...
}

TransportMode.java是一个接口

public interface TransportMode {

}

我有两个实现PublicMode.java接口的类PublicTransport.java和PrivateTransport.java。

public class PublicTransport implements TransportMode {
    private String origin;
    private String destination;
    private String carryingCapacity;
    ...
}

public class PrivateTransport implements TransportMode {
    private String brand;
    private String model;
    private String insuranceStatus;
    ...
}

transportTypePublicPrivate中可以是要反序列化的基础。

{
  "transportDetails": {
    "transportDurationInMins": "45",
    "transportCost": "20",
    "transportType": "Private"
  },
  "transportMode": {
    "model": "car model",
    "insuranceStatus": "Full",
    "brand": "car brand"
  }
}

在尝试将上述JSON反序列化为Transport对象时,出现以下错误:

Unexpected token (END_OBJECT), expected VALUE_STRING: need JSON String that contains type id

有什么方法可以访问Transport.java类中的transportType来执行反序列化吗?

0 个答案:

没有答案
相关问题