Java 使用嵌套类将JSON转换为POJO

Java 使用嵌套类将JSON转换为POJO,java,json,jackson,inner-classes,Java,Json,Jackson,Inner Classes,我从数据提供者那里收到一些字符串格式的JSON,据我所知,我可以使用类文件将JSON转换为POJO。数据提供程序提供@JsonProperty类,我已设法使用这些类将JSON转换为POJO。我的问题是,是否可能只有一个嵌套的java类包含所有@JsonProperty类?而不是有单独的类,其中有很多 Json字符串: BillingAccount.java DataKeys.java Request.java POJO.java 理想溶液: 正如您所看到的,有一个JSONSorter类,它包含了

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

Json字符串:

BillingAccount.java

DataKeys.java

Request.java

POJO.java

理想溶液:

正如您所看到的,有一个JSONSorter类,它包含了其他类。因此,在创建POJO时,我将调用publicJSONSorter.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的现有实例。

此解决方案有什么问题?如果需要,您可以跳过一些属性并使用大写字母命名策略,但通常这是最灵活的方法。它没有问题,但是在我的例子中,由于使用相同的名称检索不同的数据集,会有数百个类。因此,“公共类DataKeys{}”会有很多版本,具体取决于检索的数据。我已经用理想的解决方案更新了我的帖子。希望这样做可以澄清。如果根据DataSet IMHO有这么多不同的属性,你应该用一种动态的方式来代替像HashMapOR这样的具体类型的类,如果只有DataKEY属性是动态的和变化的,那么你可以考虑只使用数据表来创建数据表,剩下的部分就保留下来。
public class BillingAccount
{
    @JsonProperty("AccountType")
    public String accountType;
    @JsonProperty("AccountBalance")
    public double accountBalance;
    @JsonProperty("TransactionCost")
    public double transactionCost;
    @JsonProperty("ExtraInformation")
    public ExtraInformation extraInformation;
}
public class DataKeys
{
    @JsonProperty("Vrm")
    public String vrm;
}
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 POJO {

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

}
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;
    }

}