使用Jackson和Autovalue的java多态列表序列化
我正在将AutoValue对象的列表序列化到数据保持器中,如以下示例所示:
public class DataHolder {
public List<Super> stuff = new ArrayList<>();
}
这些值如下所示:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value = SubOne.class, name = "one")
})
interface Super{}
@AutoValue
public abstract class SubOne implements Super{
@JsonCreator
public static SubOne create() {
return new AutoValue_SubOne();
}
}
当我试图对数据持有者进行如下整理时:
DataHolder holder = new DataHolder();
holder.stuff.add(SubOne.create());
ObjectMapper mapper = new ObjectMapper();
final byte[] bytes = mapper.writeValueAsBytes(holder);
final DataHolder list = mapper.readValue(bytes, DataHolder.class);
我得到以下例外:
Could not resolve type id 'AutoValue_SubOne' into a subtype of [simple type, class Super]
at [Source: [B@4a94f1a5; line: 1, column: 12] (through reference chain: DataHolder["stuff"])
com.fasterxml.jackson.databind.JsonMappingException: Could not resolve type id 'AutoValue_SubOne' into a subtype of [simple type, class Super]
at [Source: [B@4a94f1a5; line: 1, column: 12] (through reference chain: DataHolder["stuff"])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
at com.fasterxml.jackson.databind.DeserializationContext.unknownTypeException(DeserializationContext.java:677)
at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:158)
是否有将生成的AutoValue对象映射回注释值的配置,以便在集合中进行多态序列化
共 (0) 个答案