Я получаю JSON в формате String от поставщика данных, насколько я понимаю, я могу преобразовать JSON в POJO, используя файл класса.Поставщик данных предоставляет @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 я бы назвал public JSONSorter.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;
}
}