У меня есть класс Food
, который необходимо использовать в качестве класса десериализации.
public class Food {
private VegetableConfiguration vegetableConfiguration;
private Color color;
// ...
// Getters/Setters
}
public interface VegetableConfiguration {
// ...
}
public class PotatoConfiguration implements VegetableConfiguration {
// ...
}
public class CarrotConfiguration implements VegetableConfiguration {
// ...
}
public class PepperConfiguration implements VegetableConfiguration {
// ...
}
public enum Color {
BROWN, ORANGE, RED
}
Мне нужно выбрать реализацию VegetableConfiguration
на основе Color
Я получаю из ответа.
Я пытаюсь использовать JsonTypeInfo
форму Джексона. В соответствии с JavaDo c его можно использовать для свойства.
public class Food {
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
property = "color")
@JsonSubTypes({
@JsonSubTypes.Type(value = PotatoConfiguration.class, name = "BROWN"),
@JsonSubTypes.Type(value = CarrotConfiguration.class, name = "ORANGE"),
@JsonSubTypes.Type(value = PepperConfiguration.class, name = "RED"),
})
private VegetableConfiguration vegetableConfiguration;
private Color color;
// ...
// Getters/Setters
}
, но происходит сбой со следующей ошибкой
org.springframework.web.client.RestClientException: Error while extracting response for type [Food] and content type [application/json;charset=UTF-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Missing type id when trying to resolve subtype of [simple type, class VegetableConfiguration]: missing type id property 'color' (for POJO property 'vegetableConfiguration'); nested exception is com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when trying to resolve subtype of [simple type, class VegetableConfiguration]: missing type id property 'color' (for POJO property 'vegetableConfiguration')
Как заставить его выбрать реализацию для VegetableConfiguration
на десериализацию в зависимости от color
?
Желательно без реализации пользовательского десериализатора.