Полиморфная десериализация Джексона с несколькими абстрактными классамиJAVA

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

Сообщение Anonymous »

У меня есть иерархия класса, где:
  • AbstractParent является абстрактным классом верхнего уровня.
  • AbstractChild расширяет абстрактный PPARENT (1..n Subclass). реализации).
Оба абстрактных класса используют полиморфную десериализацию Джексона , но они полагаются на различные клавиши дискриминатора :
  • Код: Выделить всё

    AbstractParent
    использует key1 для определения правильного AbstractChild subtype.
  • Код: Выделить всё

    AbstractChild
    использует key2 для определения правильного ConceteObj .
Структура класса
Abstract Parent

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

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "key1")
@JsonSubTypes({
@JsonSubTypes.Type(value = AbstractChildA.class, name = "CHILD_A"),
@JsonSubTypes.Type(value = AbstractChildB.class, name = "CHILD_B")
})
public abstract class AbstractParent {
private String key1;

public AbstractParent() {}

public AbstractParent(String key1) {
this.key1 = key1;
}
}
< /code>
 абстрактный ребенок < /h3>
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "key2")
@JsonSubTypes({
@JsonSubTypes.Type(value = ConcreteObjX.class, name = "CONCRETE_X"),
@JsonSubTypes.Type(value = ConcreteObjY.class, name = "CONCRETE_Y")
})
public abstract class AbstractChild extends AbstractParent {
private String key2;

public AbstractChild() {}

public AbstractChild(String key1, String key2) {
super(key1);
this.key2 = key2;
}
}
< /code>
 Concrete Class < /h3>
public class ConcreteObjX extends AbstractChild {
private String someProperty;

public ConcreteObjX() {}

public ConcreteObjX(String key1, String key2, String someProperty) {
super(key1, key2);
this.someProperty = someProperty;
}
}
< /code>
 json input < /h2>
{
"key1": "CHILD_A",
"key2": "CONCRETE_X",
"someProperty": "test-value"
}
< /code>
 Выпуск < /h2>
Джексон не удается десериализировать эту структуру и бросает следующую ошибку: < /p>
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Cannot construct instance of `AbstractChild`
(no Creators, like default constructor, exist):
abstract types either need to be mapped to concrete types, have a custom deserializer, or contain additional type information.
Что я попробовал

[*] Обеспечить, что оба абстрактных класса имеют @jsontypeinfo и @jsonsubtypes .
[*] подтвердили, что ConcreteObjx правильно зарегистрирован . конструкторы по умолчанию во всех абстрактных и конкретных классах.
[*] Попытка с использованием Deserializer , но все еще не проходит. Аннотация класса имеет свой собственный ключ для дискриминатора ?
Потребуется ли Custom Deserializer , или есть способ заставить Джексона справиться с этим из коробки? @Jsonsubtypes. < /P>
< /li>
проверил, что ConcreteObjx правильно зарегистрирован в AbstractChild. но это все еще терпит неудачу.



Подробнее здесь: https://stackoverflow.com/questions/794 ... ract-class
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Полиморфная десериализация Джексона с несколькими абстрактными классами
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Полиморфная десериализация Джексона с несколькими абстрактными классами
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Полиморфная десериализация многоуровневого наследования через Джексона в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Десериализация Джексона с анонимными классами
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между абстрактными классами и интерфейсами в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

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