使用Jackson As.External_Property和Collection
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Jackson As.External_Property和Collection相关的知识,希望对你有一定的参考价值。
尝试使用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
属性,每个子类必须实现返回它的类名
答案
这是不可能的。您的Collection
声明可以指示统一的非多态类型,或多态类型的基础。但它不能强制内容。
以上是关于使用Jackson As.External_Property和Collection的主要内容,如果未能解决你的问题,请参考以下文章