從 JSON 生成 Java 類
瀏覽人數:608最近更新:
- java
- JSON
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
方法。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議