有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用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) 个答案