@JsonTypeInfo无效

时间:2017-05-15 10:04:09

标签: 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"
}

1 个答案:

答案 0 :(得分:1)

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

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"
}

这似乎是你所期待的