使用这些依赖项
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"
}
答案 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"
}
这似乎是你所期待的