[英]Jackson parse different level fields to one java class
我有以下 JSON 字符串和 java class。 Json:
{
"records": [
{
"metadata": {
"id": "1129836408668",
"partition": "ecp:9-ca69437a-2ad5-4233-bfc4-fd9aa049569d",
"version": "ecp:9-f66cf504-ba65-48a9-91c0-d1d8229e4899",
"currentAt": "2021-12-07T11:13:50.699Z"
},
"state": {
"effectiveFrom": "2021-12-14T06:35:09.063Z",
"effectiveTo": "2021-12-14T06:35:09.063Z",
"currentFrom": "2021-12-14T06:35:09.063Z",
"currentTo": "2021-12-14T06:35:09.063Z",
"dataItem": {
"ModifiedDate": "2021-12-07T11:13:44.099Z",
"ObjectId": "1129836408668",
"ChangeFlag": "",
"IsUnconfirmed": "false",
"CreatedDate": "2021-12-07T11:13:44.099Z"
}
}
}
],
"index": null
}
Class A:
public class ParentClass {
private Date effectiveFrom;
private Date effectiveTo;
private Date currentFrom;
private Date currentTo;
private String id;
}
Class B
public class ChildClass extends ParentClass {
@JsonProperty("ModifiedDate")
private Date ModifiedDate;
@JsonProperty("ObjectId")
private String ObjectId;
@JsonProperty("ChangeFlag")
private String ChangeFlag;
@JsonProperty("IsUnconfirmed")
private String IsUnconfirmed;
@JsonProperty("CreatedDate")
private Date CreatedDate;
}
我想用 Jackson 将state
jsonnode 中的值解析为ChildClass
。 哪种方法是最好的方法。 我的想法是尝试将state
解析为 MapA,然后将dateItem
解析为 MapB,然后将 MapB 合并到 MapA,您将得到一个 Mapc,然后将 MapC 解析为ChildClass
。 但是,我认为这不是一种有效的方法。 所以你们会有更好的解决方案。
地图C:
{
effectiveFrom=2021-12-14T06:35:09.063Z,
effectiveTo=2021-12-14T06:35:09.063Z,
currentFrom=2021-12-14T06:35:09.063Z,
currentTo=2021-12-14T06:35:09.063Z,
ModifiedDate=2021-12-07T11:13:44.099Z,
ObjectId=1129836408668,
ChangeFlag=, IsUnconfirmed=false,
CreatedDate=2021-12-07T11:13:44.099Z
}
您实际上不需要两个课程。 您只需要一个能够以自定义方式反序列化dataItem
块。 遵循以下原则的东西应该可以工作:
public class ParentClass {
private Date effectiveFrom;
private Date effectiveTo;
private Date currentFrom;
private Date currentTo;
private String id;
private Date modifiedDate;
private String objectId;
private String changeFlag;
private String isUnconfirmed;
private Date createdDate;
@JsonProperty("dataItem")
private void unpackNested(Map<String, Object> dataItem) {
this.modifiedDate = Date.from(Instant.from(DateTimeFormatter.ISO_INSTANT.parse((String) dataItem.get("ModifiedDate"))));
this.objectId = (String) dataItem.get("ObjectId");
this.changeFlag = (String) dataItem.get("ChangeFlag");
this.isUnconfirmed = (String) dataItem.get("IsUnconfirmed");
this.createdDate = Date.from(Instant.from(DateTimeFormatter.ISO_INSTANT.parse((String) dataItem.get("CreatedDate"))));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.