gpt4 book ai didi

java - 即使在注册子类型后尝试解析子类型 Jackson ION 反序列化时缺少类型 ID

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:07:26 25 4
gpt4 key购买 nike

我有一个接口(interface)-

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="type")
interface Base { ... }

我有两个派生类 - ClassAClassB。我正在尝试使用 Jackson ION 将序列化和反序列化为基本类型,如下所示 -

class TestSerDeSer {
private static ObjectMapper MAPPER = new IonObjectMapper();

static {
MAPPER.registerSubtypes(new NamedType(A.class, "A"));
MAPPER.registerSubtypes(new NamedType(B.class, "B"));
}

public byte[] serialize(Base baseType) {
try {
return MAPPER.writeValueAsBytes(baseType);
} catch (JsonProcessingException e) {
throw new RuntimeException(e.getMessage(), e);
}
}

public Base deserialize(byte[] bytes) {
Base base;
try {
base = MAPPER.readValue(bytes, Base.class);
return base;
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
}

}

我正在创建一个 Class A 的对象,并使用上述函数进行序列化和反序列化

Base baseObj = new ClassA(...);
//serialization works fine
byte[] serializedBytes = serialize(baseObj);

//this line throws exception
Base deserializedBase = deserialize(serializedBytes);

异常(exception)是——

Caused by: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when trying to resolve subtype of [simple type, class mypackage.path.Base]: missing type id property 'type'

我正在 ObjectMapper 中注册子类型。我还有基本接口(interface)中类型的注释。我在这里缺少什么?

最佳答案

您的示例使用带有 ObjectMapper 的标准 JSON,但是当序列化格式切换为带有 IonObjectMapper 的 Ion 时,它会失败。使用 com.fasterxml.jackson.dataformat:jackson-dataformat-ion:2.9.7 测试您的示例,失败并出现相同的异常。

有一个 Unresolved 问题 [avro] Support @JsonSubTypes in schema generation and serialization #11这意味着并非所有二进制数据格式都支持子类型。打开拉取请求 [Ion] Better support for Ion type annotations. #109暗示 @JsonTypeInfo 在使用 Ion 时不起作用。

关于java - 即使在注册子类型后尝试解析子类型 Jackson ION 反序列化时缺少类型 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52672038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com