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方法。
0 评论