1. 概述
在某些情况下,我们需要使用JSON文件创建Java类,通常称为简单对象表示器(POJO)。这可以通过一个便捷的工具***jsonschema2pojo***来实现,而无需从头开始编写整个类。
在这个教程中,我们将学习如何使用这个库将JSON对象转换为Java类。
2. 准备工作
我们可以使用[jsonschema2pojo-core](https://mvnrepository.com/artifact/org.jsonschema2pojo/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类,并接受四个参数:
- 输入JSON文件的inputJson URL
- 生成POJO的输出目录outputJavaClassDirectory
- POJO所属的包名packageName,以及
- 输出POJO的类名className。
然后,我们在方法中定义步骤:
- 我们首先创建一个
JCodeModel
对象,用于生成Java类 - 然后,我们定义
jsonschema2pojo
的配置,让程序识别输入源文件是JSON(getSourceType
方法) - 此外,我们将这个配置传递给一个
RuleFactory
,用于为这种映射创建类型生成规则 - 我们使用工厂创建一个
SchemaMapper
,结合SchemaGenerator
对象,它根据提供的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
}
请注意,它还相应地为嵌套的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
方法。
5. 总结
在这篇教程中,我们介绍了如何使用jsonschema2pojo
库通过示例创建JSON到Java类的转换。
如往常一样,代码片段可在GitHub上找到。