[英]Using Jackson annotations how can I get a separate JSON row for field and value in the output JSON?
我正在調用 web 服務,該服務要求發送給它的數據格式為
{
"data": [
{
"field": "Pol_OwnerName",
"value": "Policy Owner Name Here"
},
{
"field": "Pol_Number",
"value": "123456789"
]
}
我正在使用 POJO 並使用@JsonProperty
注釋:
@JsonProperty("Pol_OwnerName")
private String policyOwnerName;
@JsonProperty("Pol_Number")
private String policyNumber;
這導致 output 的形式為:
{
"Pol_OwnerName":"Policy Owner Name Here"
}
如何使用 Jackson 注釋將我的值轉換為所需的格式?
我認為您需要為您的請求提供單獨的 POJO。 您需要轉換策略 class 的內容以匹配所需的請求。 您可以像這樣創建一個簡單的WebServiceRequest
class:
public class WebServiceRequest {
@JsonProperty("data")
private List<WebServiceRequestDataEntry> data;
public List<WebServiceRequestDataEntry> getData() { return data; }
public void setData(List<WebServiceRequestDataEntry> data) { this.data = data; }
}
這將包含一組WebServiceRequestDataEntry
元素,如下所示:
public class WebServiceRequestDataEntry {
@JsonProperty("field")
private String field;
@JsonProperty("value")
private String value;
public WebServiceRequestDataEntry(String field, String value) {
this.field = field;
this.value = value;
}
public String getField() { return field; }
public void setField(String field) { this.field = field; }
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
}
然后,您可以嘗試將您的 Policy class 內容轉換為您的請求負載。 我假設您的 class 看起來像這樣:
private static class Policy {
private final String policyOwnerName;
private final String policyNumber;
public Policy(String ownerName, String number) {
this.policyOwnerName = ownerName;
this.policyNumber = number;
}
public String getPolicyOwnerName() { return this.policyOwnerName; }
public String getPolicyNumber() { return this.policyNumber; }
}
我用這段代碼對其進行了測試,它似乎按預期工作:
ObjectMapper objectMapper = new ObjectMapper();
WebServiceRequest webServiceRequest = new WebServiceRequest();
Policy[] policies = new Policy[] { new Policy("User1", "12345")};
List<WebServiceRequestDataEntry> data = new ArrayList<>();
for (Policy p : policies) {
data.add(new WebServiceRequestDataEntry("Pol_OwnerName", p.getPolicyOwnerName()));
data.add(new WebServiceRequestDataEntry("Pol_Number", p.getPolicyNumber()));
}
webServiceRequest.setData(data);
System.out.println(objectMapper.writeValueAsString(webServiceRequest));
這將打印以下 output:
{"data":[{"field":"Pol_OwnerName","value":"User1"},{"field":"Pol_Number","value":"12345"}]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.