1. Обзор
В некоторых ситуациях нам нужно создавать классы Java, также называемые POJO , с использованием файлов JSON. Это возможно без написания всего класса с нуля с помощью удобной библиотеки jsonschema2pojo
.
В этом руководстве мы увидим, как создать класс Java из объекта JSON с помощью этой библиотеки.
2. Настройка
Мы можем преобразовать объект JSON в класс Java, используя зависимость jsonschema2pojo-core
:
<dependency>
<groupId>org.jsonschema2pojo</groupId>
<artifactId>jsonschema2pojo-core</artifactId>
<version>1.1.1</version>
</dependency>
3. Преобразование классов JSON в Java
Давайте посмотрим, как написать программу с использованием библиотеки jsonschema2pojo
, которая преобразует файл JSON в класс Java.
Во-первых, мы создадим метод convertJsonToJavaClass
, который преобразует файл JSON в класс POJO и принимает четыре параметра:
- URL -адрес файла
inputJson
- outputJavaClassDirectory, где будет создан
POJO
packageName
, которому будет принадлежать класс POJO, и- выходное
имя класса POJO
.
Затем мы определим шаги в этом методе:
- Мы начнем с создания объекта класса
JCodeModel
, который будет генерировать класс Java. - Затем мы определим конфигурацию для
jsonschema2pojo
, которая позволит программе определить, что входной исходный файл имеет формат JSON ( методgetSourceType
) . - Кроме того, мы передадим эту конфигурацию в
RuleFactory
, которая будет использоваться для создания правил генерации типов для этого сопоставления . - Мы создадим
SchemaMapper
, используя эту фабрику вместе с объектомSchemaGenerator
, который генерирует тип Java из предоставленного JSON. - Наконец, мы вызовем метод
сборки
JCodeModel
, чтобы создать выходной класс.
Посмотрим на реализацию:
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": "ForEach",
"area": "tech blogs",
"author": "ForEach",
"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
}
Обратите внимание, что он также создал новый класс Address
для вложенного объекта JSON :
@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) и создает классы Java в стиле DTO. Он предоставляет множество опций, которые вы можете включить в класс Java, включая конструкторы, а также методы hashCode, equals
и toString .
5. Вывод
В этом руководстве мы рассмотрели, как создать класс Java из JSON с примерами, используя библиотеку jsonschema2pojo
.
Как обычно, фрагменты кода доступны на GitHub .