[英]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 的通用方法。
如何將多個 JSON 響應映射到單個 Java POJO?
由於兩個響應似乎彼此完全不同,沒有任何共同之處,因此我不會嘗試使用單個類來讀取兩個響應。
期待一種將不同結構的 JSON 映射到單個 POJO 的通用方法。
您可以將兩個響應解析為Map<String, Object>
,然后將值映射到一個公共類。
您可以創建單獨的類來映射每個響應。 它將允許您將它們解耦並根據需要發展它們。 在從一個對象映射到另一個對象時,您還可以使用映射框架(例如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.