1. 概述
在某些情況下,我們需要使用 JSON 文件創建 Java 類,也稱為 POJO(Plain Old Java Object)。這可以通過使用方便的 jsonschema2pojo 庫來實現,而無需從頭開始編寫整個類。
在本教程中,我們將學習如何使用該庫從 JSON 對象創建 Java 類。
2. 安裝配置
我們可以使用 jsonschema2pojo-core 依賴項將 JSON 對象轉換為 Java 類:
<dependency>
<groupId>org.jsonschema2pojo</groupId>
<artifactId>jsonschema2pojo-core</artifactId>
<version>1.1.1</version>
</dependency>3. JSON 到 Java 類轉換
讓我們看看如何使用 jsonschema2pojo 庫編寫一個程序,將 JSON 文件轉換為 Java 類。
首先,我們將創建一個名為 convertJsonToJavaClass 的方法,該方法將 JSON 文件轉換為 POJO 類,並接受四個參數:
- 一個 inputJson 文件 URL
- 一個 outputJavaClassDirectory,用於生成 POJO
- packageName,POJO 所屬的包名
- 一個輸出 POJO className。
然後,我們將定義該方法中的步驟:
- 我們首先創建一個 JCodeModel 對象,該對象將生成 Java 類
- 然後,我們將定義 jsonschema2pojo 的配置,這允許程序識別輸入源文件是 JSON(getSourceType 方法)
- 此外,我們將將此配置傳遞給 RuleFactory,該工廠將用於為此映射創建類型生成規則
- 我們使用此工廠以及 SchemaGenerator 對象創建一個 SchemaMapper,該對象從提供的 JSON 生成 Java 類型
- 最後,我們將調用 JCodeModel 的 build 方法以創建輸出類。
讓我們看看實現:
public void convertJsonToJavaClass(URL inputJsonUrl, File outputJavaClassDirectory, String packageName, String javaClassName)
throws IOException {
JCodeModel jcodeModel = new JCodeModel();
GenerationConfig config = new DefaultGenerationConfig() {
@Override
public boolean isGenerateBuilders() {
return true;
}
@Override
public SourceType getSourceType() {
return SourceType.JSON;
}
};
SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator());
mapper.generate(jcodeModel, javaClassName, packageName, inputJsonUrl);
jcodeModel.build(outputJavaClassDirectory);
}4. 輸入與輸出
讓我們使用以下示例 JSON 進行程序執行:
{
"name": "Baeldung",
"area": "tech blogs",
"author": "Eugen",
"id": 32134,
"topics": [
"java",
"kotlin",
"cs",
"linux"
],
"address": {
"city": "Bucharest",
"country": "Romania"
}
}當我們執行我們的程序後,它會在指定的目錄下創建以下 Java 類:
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"name", "area", "author", "id", "topics", "address"})
@Generated("jsonschema2pojo")
public class Input {
@JsonProperty("name")
private String name;
@JsonProperty("area")
private String area;
@JsonProperty("author")
private String author;
@JsonProperty("id")
private Integer id;
@JsonProperty("topics")
private List<String> topics = new ArrayList<String>();
@JsonProperty("address")
private Address address;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
// getters & setters
// hashCode & equals
// toString
}請注意,這同時也創建了一個新的 Address 類用於嵌套的 JSON 對象:
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"city", "country"})
@Generated("jsonschema2pojo")
public class Address {
@JsonProperty("city")
private String city;
@JsonProperty("country")
private String country;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
// getters & setters
// hashCode & equals
// toString
}我們也可以通過訪問 jsonschema2pojo.org 來實現這一切。 jsonschema2pojo 工具接受一個 JSON(或 YAML)模式文檔,並生成 DTO 風格的 Java 類。 它提供了許多選項,您可以選擇包含在 Java 類中,包括構造函數以及 hashCode, equals 和 toString 方法。
5. 結論
在本教程中,我們介紹瞭如何使用示例代碼,通過 jsonschema2pojo 庫從 JSON 創建 Java 類。