gpt4 book ai didi

java - @JsonTypeInfo 无效

转载 作者:行者123 更新时间:2023-11-30 10:29:34 26 4
gpt4 key购买 nike

使用这些依赖

compile "com.fasterxml.jackson.core:jackson-annotations:2.8.8"
compile "org.codehaus.jackson:jackson-mapper-asl:1.9.13"

然后有一个抽象类,它有@JsonTypeInfo

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class", visible=true)
public abstract class Event {
...
}

然而,当我序列化一个具体的子类时,输出中没有 @class 属性

一个具体的子类

public class SpecificEvent extends GatewayEvent {
private String id;
...
}

以及序列化它的代码。

ObjectMapper mapper = new ObjectMapper();
mapper.writerWithDefaultPrettyPrinter().writeValue(new FileWriter(new File("build/event.json")), new SpecificEvent("eventId"));

但是我发现生成的 json 不包含属性 @class,因此反序列化也失败了。

生成的json是这样的

{
"id": "eventId"
}

最佳答案

您正在混合来自 codehaus 的 jackson v1 和来自 fasterxml 的 v2 的非常不同版本的注释和映射器。使用当前版本的 Jackson(推荐)的依赖项是:

com.fasterxml.jackson.core:jackson-databind:2.8.8
com.fasterxml.jackson.core:jackson-annotations:2.8.8

(jackson-annotations 可能不是明确需要的,因为 jackson-databind 依赖于它)。

或者如果您绝对必须使用 Jackson 的旧版本:

org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.jackson:jackson-core-asl:1.9.13

我用 jackson 2.8.8 尝试了你的 @JsonTypeInfo 并且我得到了(JacksonBinding 是我的测试类所在的包):

{
"@class" : "JacksonBinding.SpecificEvent",
"id" : "eventId"
}

这似乎是你所期望的

关于java - @JsonTypeInfo 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43976649/

26 4 0
文章推荐: javascript - 从