Полиморфная десериализация многоуровневого наследования через Джексона в JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Полиморфная десериализация многоуровневого наследования через Джексона в Java

Сообщение Anonymous »

Как мне десериализовать следующий пример, чтобы Джексон автоматически предоставил мне правильный объект

Код: Выделить всё

public class vehicle {
String vehicleType;
}

public class car extends vehicle {
String carType;
String make;
}

public class sedan extends car {
String model;
}
В идеале я хочу передать структуру json в следующий код и создать объект правильного подтипа.
Например:

Код: Выделить всё

        ObjectMapper mapper = new ObjectMapper();
vehicle myVehicle = mapper.readValue(inputData, vehicle.class);
Assertions.assertInstanceOf(sedan.class, myVehicle);
Приведенный выше тест должен выполняться для следующих данных json

Код: Выделить всё

{
"vehicleType" : "car",
"carType" : "sedan",
"make" : "Foo",
"model" : "Bar"
}
Я могу правильно получить до 1 уровня наследования, используя что-то вроде

Код: Выделить всё

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "vehicleType")
@JsonSubTypes({
@JsonSubTypes.Type(value = car.class, name = "car")
})
public class vehicle {...}

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "carType")
@JsonSubTypes({
@JsonSubTypes.Type(value = sedan.class, name = "sedan")
})
public class car extends vehicle {...}

public class sedan extends car {...}

Когда я запускаю приведенный выше код, я получаю объект типа автомобиль, а не объект типа седан.

Подробнее здесь: https://stackoverflow.com/questions/790 ... son-in-jav
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»