1. Overview
1.概述
In some situations, we need to create Java classes, also called POJOs, using JSON files. This is possible without writing the whole class from scratch using a handy jsonschema2pojo library.
在某些情况下,我们需要使用JSON文件创建Java类,也称为POJO。使用一个方便的jsonschema2pojo库,就可以不用从头开始编写整个类了。
In this tutorial, we’ll see how to create a Java class from a JSON object using this library.
在本教程中,我们将看到如何使用这个库从JSON对象中创建一个Java类。
2. Setup
2.设置
We can convert a JSON object into a Java class using the jsonschema2pojo-core dependency:
我们可以使用jsonschema2pojo-core依赖性将JSON对象转换成一个Java类:。
<dependency>
<groupId>org.jsonschema2pojo</groupId>
<artifactId>jsonschema2pojo-core</artifactId>
<version>1.1.1</version>
</dependency>
3. JSON to Java Class Conversion
3.JSON到Java类的转换
Let’s see how to write a program using the jsonschema2pojo library, which will convert a JSON file into a Java class.
让我们看看如何使用jsonschema2pojo库编写一个程序,将JSON文件转换成一个Java类。
First, we’ll create a method convertJsonToJavaClass that converts a JSON file to a POJO class and accepts four parameters:
首先,我们将创建一个方法convertJsonToJavaClass,将JSON文件转换为POJO类并接受四个参数。
- an inputJson file URL
- an outputJavaClassDirectory where the POJO would get generated
- packageName to which the POJO class would belong and
- an output POJO className.
Then, we’ll define the steps in this method:
然后,我们将定义这个方法的步骤。
- We’ll start with creating an object of JCodeModel class, which will generate the Java class
- Then, we’ll define the configuration for jsonschema2pojo, which lets the program identify that the input source file is JSON (the getSourceType method)
- Furthermore, we’ll pass this configuration to a RuleFactory, which will be used to create type generation rules for this mapping
- We’ll create a SchemaMapper using this factory along with the SchemaGenerator object, which generates the Java type from the provided JSON
- Finally, we’ll call the build method of the JCodeModel to create the output class
Let’s see the implementation:
让我们看看实施情况。
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. Input and Output
4.输入和输出
Let’s use this sample JSON for the program execution:
让我们使用这个JSON样本来执行程序。
{
"name": "Baeldung",
"area": "tech blogs",
"author": "Eugen",
"id": 32134,
"topics": [
"java",
"kotlin",
"cs",
"linux"
],
"address": {
"city": "Bucharest",
"country": "Romania"
}
}
Once we execute our program, it creates the following Java class in the given directory:
一旦我们执行我们的程序,它就会在给定的目录中创建以下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
}
Note that it has consequently created a new Address class for the nested JSON object as well:
注意,它也因此为嵌套的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
}
We can also achieve all of this by simply visiting jsonschema2pojo.org. The jsonschema2pojo tool takes a JSON (or YAML) schema document and generates DTO-style Java classes. It provides many options that you can choose to include in the Java class, including constructors as well as hashCode, equals, and toString methods.
我们也可以通过简单地访问jsonschema2pojo.org来实现这一切。jsonschema2pojo工具采用JSON(或YAML)模式文档并生成DTO风格的Java类。它提供了许多选项,您可以选择将其包含在Java类中,包括构造函数以及hashCode、equals、和toString方法。
5. Conclusion
5.总结
In this tutorial, we covered how to create a Java class from JSON with examples using the jsonschema2pojo library.
在本教程中,我们介绍了如何使用jsonschema2pojo库从JSON中创建一个Java类的例子。
As usual, code snippets are available over on GitHub.
像往常一样,代码片段可以在GitHub上找到。