Подтвердить что ты не робот

Невозможно построить экземпляр - Джексон

Я использую Джексона, и у меня возникают проблемы, когда я пытаюсь десериализовать объект, я получаю следующую ошибку:

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;

Может ли кто-нибудь мне помочь?

4b9b3361

Ответ 1

Вы не можете управлять абстрактным классом, Джексон тоже. Вы должны дать Jackson информацию о том, как создать экземпляр MyAbstractClass с конкретным типом.

См. этот ответ в stackoverflow: Библиотека Jackson JSON: как создать экземпляр класса, содержащего абстрактные поля

И, возможно, также см. Обработка символов в стиле "Джексон Полиморф"

Ответ 2

Ваше объявление @JsonSubTypes не имеет смысла: ему нужно перечислить классы реализации (под), а не сам класс (что было бы бессмысленно). Поэтому вам нужно изменить эту запись, чтобы отобразить подкласс (ы); или использовать какой-либо другой механизм для регистрации подклассов (SimpleModule имеет что-то вроде addAbstractTypeMapping).