Джексон исключает перенос в определенный класс при использовании JsonTypeInfo.As.WRAPPER_OBJECT - PullRequest
1 голос
/ 02 мая 2019

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

Animal.java:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "dog"), 
                @JsonSubTypes.Type(value = Cat.class, name = "cat") })
public class Animal {
    private String name;
}

Dog.java

public class Dog extends Animal {}

Cat.java

public class Cat extends Animal {}

Zoo.java

public class Zoo {
    private List<Animal> allAnimals;
    private Dog gaurdDog;

    // Getters and Setters
}

При простой инициализации это создает следующий JSON: {"allAnimals": [{"cat": {"name": "zazzy"}}, {"cat ": {" name ":" pus "}}, {" dog ": {" name ":" marley "}}]," gaurdDog ": {" dog ": {" name ":" rambo "}}} Здесь все как я и ожидал.dog и cat обернуты в объект с именем, которое я указал, когда они являются частью Animal List.

В случае свойства gaurdDog, я хочу исключить обтекание и поставитьвсе параметры, как показано ниже

...
    "gaurdDog": {
         "name": "rambo"
    }
...

Как мне этого добиться?

В основном я хочу создать оболочку вокруг Dog, когда она является частью Animal List.

Использование: Jackson 2.3.0

1 Ответ

1 голос
/ 02 мая 2019

Id.NONE должно работать здесь.Вы должны аннотировать данное свойство, как показано ниже:

@JsonTypeInfo(use = Id.NONE)
private Dog gaurdDog;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...