繁体   English   中英

使用嵌套类将JSON转换为POJO

[英]Convert JSON to POJO using nested classes

我从数据提供者处收到一些String格式的JSON,据我了解,我可以使用类文件将JSON转换为POJO。 数据提供程序提供了@JsonProperty类,我已经设法使用@JsonProperty类将JSON转换为POJO。 我的问题是,是否可能只有一个嵌套的Java类包含所有@JsonProperty类? 而不是有很多单独的类。

Json String:

{
    "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;

}

理想的解决方案:

如您所见,有JSONSorter类容纳其他类。 因此,在创建POJO时,我将调用公共JSONSorter.Request request; 而不是只调用Request。 之所以这是一个理想的解决方案,是因为Request类可能具有不同的属性,具体取决于要检索的数据集。 因此,除了拥有Request1,Request2,Request3之外,拥有JSONSorter1,JSONSorter2,JSONSorter3也不是更好。 每个类别都将包含要检索的数据所必需的类。

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实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM