從 JSON 生成 Java 類

1. 概述

在某些情況下,我們需要使用 JSON 文件創建 Java 類,也稱為 POJO。這是可能的,而無需使用方便的**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
  • 將生成 POJO 的outputJavaClassDirectory
  • POJO 類所屬的packageName
  • 輸出 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": "1ju.org",
 "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
 }

**請注意,它因此也為嵌套的 JSON 對象Address**類:

@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方法。