У меня есть полиморфная иерархия классов, которую нужно отправлять / извлекать в / из REST Api.
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include =
JsonTypeInfo.As.PROPERTY, property = "@class")
public class Property implements IProperty, Serializable {
private static final long serialVersionUID = 1L;
private String name;
И, например, один из его детей:
public class PropertyEnum extends Property {
private static final long serialVersionUID = 1L;
private String value;
private Collection<String> values = new LinkedList<String>();
При отправке массивов Property [] для отдыха ресурса или их получении, поле значения из PropertyEnum пустое и не заполняется!
Поле значений в другой руке заполнено.
имя заполнено наверняка, потому что оно находится в родительском классе.
Я тоже пробовал:
//@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", include =JsonTypeInfo.As.EXTERNAL_PROPERTY)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY,
property = "name")
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = PropertyEnum.class, name = "enum")
})
@JsonTypeName("enum")
public class PropertyEnum extends Property {
(Несмотря на то, что при добавлении новых типов требуется постоянно поддерживать код!)
еще одна попытка:
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY,
property="objectType")
@JsonSubTypes({
@JsonSubTypes.Type(value=PropertyEnum.class)
})
public class Property implements IProperty, Serializable {
private static final long serialVersionUID = 1L;
private String name;
protected Property(){}
...
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY,
property="objectType")
public class PropertyEnum extends Property {
private static final long serialVersionUID = 1L;
private String value;
private Collection<String> values = new LinkedList<String>();
protected PropertyEnum(){}
Но у меня странное поведение ... одно для дочерних полей заполняется (значения), а другое (значение) нет?
У меня есть сеттер / геттер для обоих!
Есть идеи?
С уважением.