我正在努力将reddit API中的一些内容反序列化为POJO。我的目标是尽可能简化代码,因为reddit中实体之间的JSON结构通常是相同的。
作为示例,反序列化链接对象的JSON将如下所示:
[
{
"kind": "Listing",
"data": {
"modhash": "",
"children": [
{
"kind": "t3",
"data": {
"title": "A sample link from reddit"
}
}
]
}
}
]
我可以反序列化这个没问题,但由于reddit注释因kind
t1
和data
对象下面的RedditEntity
对象而有所不同,所以我想为包装它的JSON重用相同的类结构,而不是必须创建具有一个或两个行差异的多个复制类。
我创建了一个空白界面RedditLink
,并创建了一个实现它的@JsonSubType
类。我的问题是我不知道如何告诉Jackson要反序列化的接口实现。通常我会使用data
注释,但这只适用于对象内的成员,而不适用于包装它的成员。我也不知道如何编写一个可以在类似级别工作的自定义反序列化器,我可以从父对象中确定类型。
我的问题是,如何根据上面的kind
类型对{{1}}对象进行反序列化?
答案 0 :(得分:0)
为什么你需要知道上面的类型?似乎这应该工作:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "kind")
@JsonSubTypes({
@JsonSubTypes.Type(RedditListing.class),
@JsonSubTypes.Type(RedditLink.class),
@JsonSubTypes.Type(RedditComment.class)})
public static interface RedditEntity {}
@JsonTypeName("Listing")
public static class RedditListing implements RedditEntity { ... }
@JsonTypeName("t1")
public static class RedditComment implements RedditEntity { ... }
@JsonTypeName("t3")
public static class RedditLink implements RedditEntity { ... }