java - @JsonTypeInfo 无效

标签 java jackson

使用这些依赖

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/

相关文章:

java - 如何读取位于项目文件夹java中的文件

java - IntelliJ + JUnit 5(木星)

java - HashSet 中有多少个唯一对象以及使用哪个方法检查唯一性等于或 hashCode

java - 将 JsonNode 对象转换为 Map

放轻松, jackson 它是如何开箱即用的?

java - 对 kotlin 数据类使用 Jackson @JsonProperty 注释

java - 框架总是在我的程序之上

java - 我应该在 Java 8 中使用哪个日期类?

java - 使用 Jackson 通过 @JsonUnwrapped 反序列化多态类型

java - 如何将 List 包装为 Jackson 生成的 JSON 中的顶级元素