我收到一个对象的 JSON 数组,它们都有字段content,但是这个字段的类型可能不同:
[
{
"id": "primaryBodyHeader",
"type": "RichText",
"content": "<h1>Alice's Adventures in Wonderland</h1>"
},
{
"id": "1027",
"type": "RichText",
"content": {
"value": "RVMtMTk=",
"contentType": "DynamicContent"
}
}
]
我有 bean :
public abstract class LandingPageContentItem {
private String id;
private String type;
private String content;
}
至少我想将 content 映射到文本字段(非文本内容为 null)
最多,我想根据字段content 的类型将不同种类的项目映射到不同的子类——TextContentItem、ComplexContentItem 等等。 @JsonSubTypes 不能这样做
有没有办法在没有自定义反序列化器的情况下做到这一点?
最佳答案
如果您不知道(或无法控制)content
字段中的内容,那么我建议您映射原始 com.fasterxml.jackson.databind.JsonNode
像这样
public static class LandingPageContentItem {
private final String id;
private final String type;
private final JsonNode content;
@JsonCreator
public LandingPageContentItem(
@JsonProperty("id") final String id,
@JsonProperty("type") final String type,
@JsonProperty("content") final JsonNode content) {
this.id = id;
this.type = type;
this.content = content;
}
/* some logic here */
}
然后就可以正常阅读了
ObjectMapper mapper = new ObjectMapper();
List<LandingPageContentItem> items =
mapper.readValue(node, new TypeReference<List<LandingPageContentItem>>() {});
稍后您可以验证 JsonNode
是否为预期类型。
if (content.isTextual()) {
// do something with content.asText();
}
关于java - 将 JSON 解码为具有不同字段类型 jackson 的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39110934/