Невозможно построить экземпляр - Джексон
Я использую Джексона, и у меня возникают проблемы, когда я пытаюсь десериализовать объект, я получаю следующую ошибку:
com.fasterxml.jackson.databind.JsonMappingException:
Can not construct instance of net.MyAbstractClass,
problem: abstract types either need to be mapped to concrete types,
have custom deserializer, or be instantiated with additional type information
У меня возникают проблемы с атрибутом:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT, property = "@id")
@JsonSubTypes({ @JsonSubTypes.Type(value = MyAbstractClass.class, name = "MyAbstractClass") })
@ManyToOne
private MyAbstractClass object;
Может ли кто-нибудь мне помочь?
Ответы
Ответ 1
Вы не можете управлять абстрактным классом, Джексон тоже.
Вы должны дать Jackson информацию о том, как создать экземпляр MyAbstractClass с конкретным типом.
См. этот ответ в stackoverflow: Библиотека Jackson JSON: как создать экземпляр класса, содержащего абстрактные поля
И, возможно, также см. Обработка символов в стиле "Джексон Полиморф"
Ответ 2
Ваше объявление @JsonSubTypes
не имеет смысла: ему нужно перечислить классы реализации (под), а не сам класс (что было бы бессмысленно). Поэтому вам нужно изменить эту запись, чтобы отобразить подкласс (ы); или использовать какой-либо другой механизм для регистрации подклассов (SimpleModule
имеет что-то вроде addAbstractTypeMapping
).