如何将没有封装在json对象中的不同json属性拆分为多个模型java类



我有一个具有不同键属性值的大负载。我尝试基于门户上的对象创建单独的模型类。但是,没有为这些属性包装单独的json对象。我的问题是如何将大型json对象拆分为单独的java类。

有效载荷:

{
"documentType": "BDFFIIJCDSAAA",
"documentGroup": "394EIIJCDSAAA",
"ply": "0",
"numberOfCopies": "1",
"tpDocNumbers": [
"507317219"
],
"product": {
"vessel": null,
"voyage": null,
"countryOfReceipt": null,
"includeCountryOfReceipt": "true",
"countryOfLoading": null,
"includeCountryOfLoading": "true",
"countryOfDischarge": null,
"includeCountryOfDischarge": "true",
"iountryOfDelivery": null,
"includeCountryOfDelivery": "true",
"tradeLane": null,
"includeTradeLane": "true",
"placeOfReceipt": null,
"includePlaceOfReceipt": "true",
"loadPort": null,
"includeLoadPort": "true",
"dischargePort": null,
"includeDischargePort": "true",
"placeOfDelivery": null,
"includePlaceOfDelivery": "true"
},
"isTaskStatusBlank": "true",
"isTaskStatusOpen": "true",
"isTaskStatusClosed": "true",
"recepient": "Direct",
"recepientPort": null,
"communication": "Email",
"contact": "avinash.m@maersk.com",
"subject": "latest123",
"docBrokerDomain": "",
"printerName": "",
"templateDomain": "",
"priority": "",
"freeText": "" 
}

Java模型类-

public class A {
@JsonProperty("DocumentType")
private String documentType;
@JsonProperty("DocumentGroup")
private String documentGroup;
private Ply ply;
@JsonProperty("PartyRoles")
private String partyRoles;
@JsonProperty("CustomerId")
private String customerId;
@JsonProperty("PartyRoleTypeId")
private String partyRoleTypeId;
@JsonProperty("PartyRefNo")
private String partyRefNo;
@JsonProperty("TPDocNumbers")
private List<String> tpDocNumbers;
@JsonProperty("Product")
private Product product;
private Cargo cargoInfo;
private TaskCriteria taskCriteria;
private Recipient recipientInfo;
@JsonProperty("DocBrokerDomain")
private String docBrokerDomain;
@JsonProperty("PrinterName")
private String printerName;
@JsonProperty("TemplateDomain")
private String templateDomain;
@JsonProperty("Priority")
private String priority;
@JsonProperty("RequestType")
private String requestType;
@JsonProperty("FreeText")
private String freeText;
}
public class Ply {

@JsonProperty("Ply")
private int plyNumber;// plySelection

@JsonProperty("NumberOfCopies")
private int copies;// copySelection

@JsonProperty("freightSelection")
private String freightSelection;  
}

这不起作用,我得到错误-";没有从"处的字符串值("0"(\n反序列化的字符串参数构造函数/工厂方法;当遇到Ply Object类时。

由于在JSON中,Ply属性与所有其他A类属性处于同一级别,因此需要在private Ply ply;属性中使用@JsonUnwrapped。此外,考虑到Jackson ObjectMapper在反序列化时区分大小写,您还需要调整@JsonProperty注释(如果属性名称与JSON属性匹配,则您甚至不需要注释(:

public class A {
private String documentType;
private String documentGroup;
@JsonUnwrapped
private Ply ply;
private String partyRoles;
private String customerId;
private String partyRoleTypeId;
private String partyRefNo;
private List<String> tpDocNumbers;
private Product product;
private Cargo cargoInfo;
private TaskCriteria taskCriteria;
private Recipient recipientInfo;
private String docBrokerDomain;
private String printerName;
private String templateDomain;
private String priority;
private String requestType;
private String freeText;
}

您还需要调整Ply以匹配JSON属性:

public class Ply {
@JsonProperty("ply")
private int plyNumber;
@JsonProperty("numberOfCopies")
private int copies;
private String freightSelection;
}

您面临的问题是因为您的JSON将ply作为字符串值,而您的POJO使用ply作为ply类的Object。解决方案:

  1. 将POJO从Ply对象更改为Ply整数值
  2. 将Json从层字符串更改为层的对象,并将层编号作为属性值
  3. 您还可以使用ObjectMapper readTree将JSON读取为树并创建映射

最新更新