拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 从JSON 生成Java 类

从JSON 生成Java 类

白鹭 - 2021-11-19 2271 0 2

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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *