簡體   English   中英

使用 Jackson 注釋我怎樣才能在 output Z0ECD402181C1D7A2D78 中為字段和值獲取單獨的 JSON 行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM