需要将多种类型的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的通用方法。
答案 0 :(得分:2)
如何将多个JSON响应映射到单个Java POJO?
由于两个响应似乎彼此完全不同,没有什么共同点,所以我将避免尝试使用单个类来读取两个响应。
期望将不同的结构化JSON映射到单个POJO的通用方法。
您可以将两个响应都解析为Map<String, Object>
,然后将值映射到公共类。
您可以创建单独的类来映射每个响应。它将允许您解耦并根据需要演化它们。从一个对象映射到另一个对象时,也可以使用mapping frameworks之类的MapStruct来减少样板代码。
答案 1 :(得分:1)
我建议使用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;
}
希望有帮助。
答案 2 :(得分:0)
它似乎没有通用的方法。但是您可以这样做:
答案 3 :(得分:0)
我所做的是创建了一个MyResponse模型,该模型基本上包含了您期望从JSON响应中获取的所有响应字段。 MyResponse可以控制或接收这些字段或设置器,以进行设置。
然后,我创建了一种服务类MyService,它可以发出多个请求并获得响应。
然后,您只需要在某种管理器类中或类似的名称中执行以下操作即可:
MyService mySer = new MyService();
MyResponse myRes = new MyResponse(
mySer.getDetails(),
mySer.getPicture(),
mySer.getSomethingElse()
);
这些调用(getDetails,getPicture ...)将请求发送到端点并返回响应,然后将它们映射到MyResponse类构造函数的字段中。这是由框架发生的,因此MyResponse具有类型为FIELD的注解@XmlRootElement和@XmlAccessorType以确保发生这种情况。 如果出于某种原因,例如,您不想创建包含getPicture结果的响应,则只需将null分配给该imput参数即可。
答案 4 :(得分:0)
我建议使用@JsonProperty("") 和@JsonAlias("")。
class XXX {
@JsonAlias("accountName")
@JsonProperty("ACCOUNT_NAME")
private String name;
@JsonAlias("routingNumber")
@JsonProperty("ROUTING_NUMBER")
private String routing;}
希望能帮到你。