У меня есть класс 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 {
}
У меня есть два класса PublicTransport. java и PrivateTransport. java, которые реализуют интерфейс TransportMode. 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;
...
}
transportType
в TransportDetails. java может быть Public
или Private
, на основе которого должна быть выполнена десериализация.
{
"transportDetails": {
"transportDurationInMins": "45",
"transportCost": "20",
"transportType": "Private"
},
"transportMode": {
"model": "car model",
"insuranceStatus": "Full",
"brand": "car brand"
}
}
При попытке десериализации выше JSON в объект транспорта я получаю следующую ошибку:
Unexpected token (END_OBJECT), expected VALUE_STRING: need JSON String that contains type id
Можно ли каким-либо образом получить доступ к transportType
в классе транспорта. java для выполнения десериализации?