如何将多个 JSON 响应映射到单个 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 的通用方法。


慕妹3242003
浏览 185回答 5
5回答

慕尼黑8549860

如何将多个 JSON 响应映射到单个 Java POJO?由于这两个响应似乎彼此完全不同,没有任何共同点,因此我不会尝试使用一个类来阅读两个响应。期待一种将不同结构化 JSON 映射到单个 POJO 的通用方法。您可以将两个响应都解析为 a Map<String, Object>,然后将值映射到一个公共类。您可以创建单独的类来映射每个响应。它将允许您将它们解耦并根据需要发展它们。当从一个对象映射到另一个对象时,您还可以使用MapStruct等映射框架来减少样板代码。

MYYA

它似乎没有任何通用的方法。但是你可以这样做:为每个响应类型创建多个域类创建一个单一的标准域类为每个响应类创建映射器以将其映射到标准域类。

慕姐4208626

我建议使用 Jackson Json Views。这是相同的示例:例子public class Views {&nbsp; &nbsp; public class Global {&nbsp; &nbsp; }&nbsp; &nbsp; public class Internal extends Global {&nbsp; &nbsp; }}class XXX {&nbsp; &nbsp; @JsonView(Views.Global.class)&nbsp; &nbsp; @JsonProperty("accountHolder")&nbsp; &nbsp; private String accountHolder;&nbsp; &nbsp; @JsonView(Views.Internal.class)&nbsp; &nbsp; @JsonProperty("routingNumber")&nbsp; &nbsp; private String routingNumber;}希望能帮助到你。

海绵宝宝撒

我建议使用@JsonProperty("") 和@JsonAlias("")。&nbsp;class XXX {&nbsp; &nbsp; @JsonAlias("accountName")&nbsp; &nbsp; @JsonProperty("ACCOUNT_NAME")&nbsp; &nbsp; private String name;&nbsp; &nbsp; @JsonAlias("routingNumber")&nbsp; &nbsp; @JsonProperty("ROUTING_NUMBER")&nbsp; &nbsp; private String routing;}我希望它有所帮助。

慕神8447489

我所做的是创建了一个 MyResponse 模型,其中基本上包含您希望获得的 JSON 响应中的所有响应字段。MyResponse 具有 c-tor 或接收这些字段或允许设置它们的设置器。然后我创建了某种服务类 MyService,它可以发出多个请求并获取响应。然后你只需在某种经理类或任何你称之为的类中做这样的事情:MyService mySer = new MyService();MyResponse myRes = new MyResponse(&nbsp; mySer.getDetails(),&nbsp; mySer.getPicture(),&nbsp; mySer.getSomethingElse());这些调用(getDetails、getPicture...)将请求发送到端点并返回响应,然后将响应映射到 MyResponse 类构造函数的字段中。这是由框架发生的,因此 MyResponse 具有 FIELD 类型的注释 @XmlRootElement 和 @XmlAccessorType 以确保发生这种情况。如果出于某种原因,您不想创建包含 getPicture 结果的响应,例如,您只需将 null 分配给该输入参数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java