簡體   English   中英

如何將多個 JSON 響應映射到單個 Java POJO?

[英]How to map multiple JSON responses to a single Java POJO?

需要將多種類型的 JSON 響應映射到單個 POJO,以便我可以比較不同的對象以提供有關差異的見解。

我曾嘗試將第一個響應映射到 POJO 並解析第二個響應以填充定義的 POJO:

    class XXX {
        @JsonProperty("accountHolder")
        private String accountHolder;
        @JsonProperty("routingNumber")
        private String routingNumber;
        @JsonProperty("balance")
        private List<Balance> balance;
        @JsonProperty("accountName")
        private String accountName;
        @JsonProperty("bankTransferCodeType")
        private String bankTransferCodeType;
        @JsonProperty("individualInformation")
        private IndividualInformation individualInformation;
        @JsonProperty("acctType")
        private String acctType;
        @JsonProperty("transactionList")
        private TransactionList transactionList;
        @JsonProperty("accountNumber")
        private String accountNumber;
        @JsonProperty("uniqueId")
        private String uniqueId;
        @JsonProperty("bankNetID")
        private String bankNetID;
        @JsonIgnore
        private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    }

第一反應:


[
    {
        "ACCOUNT_NAME": "",
        "ACCOUNT_NUMBER": "",
        "AVAILABLE_BALANCE": null,
        "CURRENT_BALANCE": "",
        "FULL_ACCOUNT_NUMBER": null,
    }
]

第二個回應:

"bankAccount": [
      {
        "accountName": "",
        "accountNumber": "",
        "routingNumber": "",
        "fullAccountNumber": "",
        "bankTransferCodeType": "",
        "acctType": "",
        "transactionList": {
          "transaction": [
            {
              "amount": {
                "curCode": "",
                "content": ""
              }
          ],
          "oldestTxnDate": ""
        },
        "uniqueId":
      }
}

期待一種將不同結構化 JSON 實體映射到單個 POJO 的通用方法。

它似乎沒有任何通用的方式。 但是你可以這樣做:

  • 為每個響應類型創建多個域類
  • 創建單個標准域類
  • 為每個響應類創建映射器以將其映射到標准域類。 您可以在此處使用 MapStruct參考

如何將多個 JSON 響應映射到單個 Java POJO?

由於兩個響應似乎彼此完全不同,沒有任何共同之處,因此我不會嘗試使用單個類來讀取兩個響應。

期待一種將不同結構的 JSON 映射到單個 POJO 的通用方法。

  1. 您可以將兩個響應解析為Map<String, Object> ,然后將值映射到一個公共類。

  2. 您可以創建單獨的類來映射每個響應。 它將允許您將它們解耦並根據需要發展它們 在從一個對象映射到另一個對象時,您還可以使用映射框架(例如MapStruct)來減少樣板代碼。

我建議使用 Jackson Json Views。 這是相同的示例:

例子

public class Views {

    public class Global {
    }

    public class Internal extends Global {
    }
}

class XXX {

    @JsonView(Views.Global.class)
    @JsonProperty("accountHolder")
    private String accountHolder;

    @JsonView(Views.Internal.class)
    @JsonProperty("routingNumber")
    private String routingNumber;

}

希望能幫助到你。

我所做的是創建了一個 MyResponse 模型,該模型基本上包含您期望獲得的 JSON 響應中的所有響應字段。 MyResponse 具有 c-tor 或接收這些字段或設置器,允許設置它們。

然后我創建了某種服務類 MyService ,它可以發出多個請求並返回響應。

然后,您只需在某種經理課程或任何您稱之為的課程中做這樣的事情:

MyService mySer = new MyService();

MyResponse myRes = new MyResponse(
  mySer.getDetails(),
  mySer.getPicture(),
  mySer.getSomethingElse()
);

這些調用(getDetails、getPicture...)將請求發送到端點並返回響應,然后將響應映射到 MyResponse 類構造函數的字段中。 這是由框架發生的,因此 MyResponse 具有類型為 FIELD 的 @XmlRootElement 和 @XmlAccessorType 注釋以確保發生這種情況。 如果出於某種原因,您不想創建包含 getPicture 結果的響應,例如,您只需將 null 分配給該輸入參數。

我建議使用@JsonProperty("") 和@JsonAlias("")。

 class XXX {
    @JsonAlias("accountName")
    @JsonProperty("ACCOUNT_NAME")
    private String name;

    @JsonAlias("routingNumber")
    @JsonProperty("ROUTING_NUMBER")
    private String routing;}

我希望它有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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