Как выполнить JSON десериализацию объекта, используя свойство объекта-брата? - PullRequest
1 голос
/ 26 сентября 2019

У меня есть класс 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 interface.

    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;
        ...
    }

actionType in TransactionDetails.java может быть Public или Private, на основе которого должна выполняться десериализация.

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

При попытке десериализации выше JSON в объект транспорта я получаю следующую ошибку:

Неожиданный токен(END_OBJECT), ожидаемый VALUE_STRING: нужна строка JSON, содержащая идентификатор типа

Можно ли каким-либо образом получить доступ к actionType в Transport.java классе для выполнениядесериализации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...