Полиморфная десериализация Джексона с пользовательскими критериями
Мне нужно знать, могу ли я десериализовать универсальный объект в определяющий его тип, не имея дополнительного свойства или не упоминая тип в аннотации.
Пример:-
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
В вышесказанном я должен упомянуть @class
собственность, а другой способ
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value = Dog.class, name = "Dog"),
@JsonSubTypes.Type(value = Cat.class, name = "Cat")
})
В приведенном выше примере мы определяем подклассы и пользовательский тип.
Использование обычного десериализатора StdDeserializer<T>
Есть ли другой способ сделать это, пожалуйста, скажите мне.
1 ответ
Решение
Если вы можете найти способ определения подтипа объекта из данных JSON, вы можете написать собственный распознаватель TypeId, который будет обрабатывать его для вас. Смотрите Джексон Custom TypeId Resolver.