我有以下Json:
{
"id": "id1",
"version": "id1",
"license": { "type": "MIT" }
}
其中也可以采用以下形式:
{
"id": "id1",
"version": "id1",
"license": "MIT"
}
有时它可能是:
{
"id": "id1",
"version": "id1",
"licenses": [
{ "type": "MIT", "url: "path/to/mit" },
{ "type": "Apache2", "url: "path/to/apache" }]
}
以上所有内容基本相同,我正在寻找一种方法将它们与单个字段组合并使用Jackson对其进行反序列化。任何想法?
答案 0 :(得分:2)
首先,请看这个问题:Jackson deserialization of type with different objects。您可以将JSON反序列化为低于POJO类:
class Entity {
private String id;
private String version;
private JsonNode license;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public JsonNode getLicense() {
return license;
}
public void setLicense(JsonNode license) {
this.license = license;
}
public void setLicenses(JsonNode license) {
this.license = license;
}
public String retrieveLicense() {
if (license.isArray()) {
return license.elements().next().path("type").asText();
} else if (license.isObject()) {
return license.path("type").asText();
} else {
return license.asText();
}
}
@Override
public String toString() {
return "Entity [id=" + id + ", version=" + version + ", license=" + license + "]";
}
}
如果要从POJO类中检索许可证名称,请使用retrieveLicense
方法。当然,您可以改进此方法的实现。我的示例仅显示了如何实现它的方式。如果要将POJO类与反序列化逻辑分离,可以编写自定义反序列化器。