使用这些依赖
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/