尝试使用JsonTypeInfo.As.EXTERNAL_PROPERTY序列化(然后反序列化)包含子类型列表的容器。 我得到了
com.fasterxml.jackson.core.JsonGenerationException: Can not write a field name, expecting a value
杰克逊试图写集合时(elements
)
public class Container {
public static final TypeReference<Container> CONTAINER_REF = new TypeReference<Container>() {
// nothing extra
};
@JsonTypeInfo(use = Id.NAME, include = As.EXTERNAL_PROPERTY)
@JsonSubTypes({
@Type(value = ChildOne.class, name = "childOne"),
@Type(value = ChildTwo.class, name = "childTwo"),
})
private List<? extends Parent<?>> elements;
public Container() {
super();
}
public List<? extends Parent<?>> getElements() {
return elements;
}
public void setElements(List<? extends Parent<?>> elements) {
this.elements = elements;
}
}
@JsonSubTypes({
@Type(value = ChildOne.class, name = "childOne"),
@Type(value = ChildTwo.class, name = "childTwo"),
})
public abstract class Parent<T> {
public Parent() {
super();
}
public abstract T getSomething();
public static class ChildOne extends Parent<String> {
public ChildOne() {
super();
}
@Override
public String getSomething() {
return "lala";
}
}
public static class ChildTwo extends Parent<Long> {
public ChildTwo() {
super();
}
@Override
public Long getSomething() {
return 764L;
}
}
}
请注意,我希望type
属性容器的一部分,而 属于集合中的每个项目。
修改
我最终使用JsonTypeInfo.As.Property,使用了Container
和type
两个子类,每个子类必须实现返回它的类名< / p>
答案 0 :(得分:0)
这是不可能的。您的Collection
声明可以指示统一的非多态类型,也可以指示多态类型的基础。但它不能强制内容。