为了账号安全,请及时绑定邮箱和手机立即绑定

如何将多个 JSON 响应映射到单个 Java POJO?

如何将多个 JSON 响应映射到单个 Java POJO?

慕妹3242003 2023-06-04 15:12:20
需要将多种类型的 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 的通用方法。
查看完整描述

5 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

如何将多个 JSON 响应映射到单个 Java POJO?

由于这两个响应似乎彼此完全不同,没有任何共同点,因此我不会尝试使用一个类来阅读两个响应。

期待一种将不同结构化 JSON 映射到单个 POJO 的通用方法。

  1. 您可以将两个响应都解析为 a Map<String, Object>,然后将值映射到一个公共类。

  2. 您可以创建单独的类来映射每个响应。它将允许您将它们解耦并根据需要发展它们。当从一个对象映射到另一个对象时,您还可以使用MapStruct等映射框架来减少样板代码。


查看完整回答
反对 回复 2023-06-04
?
MYYA

TA贡献1868条经验 获得超4个赞

它似乎没有任何通用的方法。但是你可以这样做:

  • 为每个响应类型创建多个域类

  • 创建一个单一的标准域类

  • 为每个响应类创建映射器以将其映射到标准域类。


查看完整回答
反对 回复 2023-06-04
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我建议使用 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;


}

希望能帮助到你。


查看完整回答
反对 回复 2023-06-04
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

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


 class XXX {

    @JsonAlias("accountName")

    @JsonProperty("ACCOUNT_NAME")

    private String name;


    @JsonAlias("routingNumber")

    @JsonProperty("ROUTING_NUMBER")

    private String routing;}

我希望它有所帮助。


查看完整回答
反对 回复 2023-06-04
?
慕神8447489

TA贡献1780条经验 获得超1个赞

我所做的是创建了一个 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 分配给该输入参数。


查看完整回答
反对 回复 2023-06-04
  • 5 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信