使用嵌套 类 将 JSON 转换为 POJO

Convert JSON to POJO using nested classes

我从数据提供商那里收到一些字符串格式的 JSON,据我所知,我可以使用 class 文件将 JSON 转换为 POJO。数据提供者提供了 @JsonProperty classes,我设法用它来将 JSON 转换为 POJO。我的问题是,是否有可能只有一个包含所有 @JsonProperty class 的嵌套 java class?而不是单独的 classes,其中有很多。

Json 字符串:

{
    "BillingAccount": {
        "AccountType": "Trial",
        "AccountBalance": 999.99,
        "TransactionCost": 999.99,
        "ExtraInformation": {}
    },

    "Request": {
        "RequestGuid": "abcde",
        "PackageId": "abcde",
        "PackageVersion": 2,
        "ResponseVersion": 2,
        "DataKeys": {
            "Vrm": "example"
        }
    }
}

BillingAccount.java

public class BillingAccount
{
    @JsonProperty("AccountType")
    public String accountType;
    @JsonProperty("AccountBalance")
    public double accountBalance;
    @JsonProperty("TransactionCost")
    public double transactionCost;
    @JsonProperty("ExtraInformation")
    public ExtraInformation extraInformation;
}

DataKeys.java

public class DataKeys
{
    @JsonProperty("Vrm")
    public String vrm;
}

Request.java

public class Request
{
    @JsonProperty("RequestGuid")
    public String requestGuid;
    @JsonProperty("PackageId")
    public String packageId;
    @JsonProperty("PackageVersion")
    public int packageVersion;
    @JsonProperty("ResponseVersion")
    public int responseVersion;
    @JsonProperty("DataKeys")
    public DataKeys dataKeys;
}

POJO.java

public class POJO {

    @JsonProperty("BillingAccount")
    public JSONSorter.BillingAccount billingAccount;
    @JsonProperty("Request")
    public JSONSorter.Request request;

}

理想解:

如您所见,JSON分拣机 class 容纳了其他 classes。因此,在创建 POJO 时,我会调用 public JSONSorter.Request request; 而不是仅调用 Request。这是一个理想的解决方案的原因是 Request class 可能具有不同的属性,具体取决于正在检索的数据集。因此,与其拥有 Request1、Request2、Request3,不如拥有 JSONSorter1、JSONSorter2、JSONSorter3 不是更好吗?每一个都包含检索数据所必需的 classes。

public class JSONSorter {

    public class Request {
        @JsonProperty("RequestGuid")
        public String requestGuid;
        @JsonProperty("PackageId")
        public String packageId;
        @JsonProperty("PackageVersion")
        public int packageVersion;
        @JsonProperty("ResponseVersion")
        public int responseVersion;
        @JsonProperty("DataKeys")
        public DataKeys dataKeys;
    }

    public class DataKeys {
        @JsonProperty("Vrm")
        public String vrm;
    }

    public class BillingAccount {
        @JsonProperty("AccountType")
        public String accountType;
        @JsonProperty("AccountBalance")
        public double accountBalance;
        @JsonProperty("TransactionCost")
        public double transactionCost;
        @JsonProperty("ExtraInformation")
        public ExtraInformation extraInformation;
    }

}

您的理想解决方案应该可行。唯一缺少的是使内部 类 静态化。它们必须是静态的,以便您的 JSON 反序列化器可以实例化它们,而无需将它们附加到 JSONSorter 的现有实例。