Как выполнить десериализацию json объекта, используя свойство свойства объекта-брата? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть класс 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 для выполнения десериализации?

...