Я пытаюсь десериализовать такой интерфейс:
public interface MyCollection<T> extends List<T> {...}
И MyCollection
имеет несколько реализаций, скажем public class MyBasicCollection<String>
и public class MyOtherCollection<String>
.
Я добавиланнотации на интерфейсе, например:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = MyBasicCollection.class, name = "basic"),
@JsonSubTypes.Type(value = MyOtherCollection.class, name = "other")
})
public interface MyCollection<T> extends List<T> {...}
Подробный код для сериализации и десериализации будет выглядеть так:
MyCollection<String> testCollection = new MyBasicCollection<String>();
ObjectMapper mapper = new ObjectMapper();
String serializedString = mapper.writeValueAsString(testCollection);
MyCollection<String> reconstructed = mapper.readValue(serializedString, new TypeReference<MyCollection<String>>(){});
И я получу
Не удается найти десериализатор для не-бетона Тип коллекции
JsonMappingException.
Однако, если я изменю последнюю строку на
MyCollection<String> reconstructed = mapper.readValue(serializedString, new TypeReference<MyBasicCollection<String>>(){});
Она отлично работает.
Есть ли способ заставить десериализацию работать с полиморфным типом?