Десериализация в подкласс без поля @type - PullRequest
0 голосов
/ 28 апреля 2018

Скажем, у меня есть обычный Animal, Cat расширяет Animal, Dog расширяет полиморфный пример Animal в Джексоне, используя @type для различения подтипов:

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


public class Cat extends Animal {
    ...
}

public class Dog extends Animal {
    ...
}

Я использую это в Spring Boot REST API.

Теперь я хочу десериализовать Cat из строки JSON, в которой нет @type. Я знаю, что это Cat, потому что это все, что принимает этот конкретный вызов REST API. Как я могу заставить Джексона десериализовать этот JSON как Cat, чтобы он не жаловался на отсутствие поля "@type"?

Я знаю, что могу включить @JsonTypeInfo(use = JsonTypeInfo.Id.NONE) в класс Cat, но тогда, когда я сериализую Cats, у меня не будет поля @type, которое я все еще хочу.

Нужно ли предоставлять собственный десериализатор? Могу ли я сделать это для метода с одним контроллером?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...