Класс ObjectMapper Flashcards
Что такое ObjectMapper
ObjectMapper — это класс из библиотеки Jackson, используемый для сериализации объектов Java в JSON и десериализации JSON обратно в объекты Java.
Какие основные задачи решает ObjectMapper
ObjectMapper выполняет преобразование Java-объектов в JSON (сериализация) и преобразование JSON в Java-объекты (десериализация).
Как сериализовать объект в JSON с использованием ObjectMapper
Для сериализации объекта в JSON используется метод
writeValueAsString(): String json = objectMapper
.writeValueAsString(obj);
Как десериализовать JSON в объект с помощью ObjectMapper
Для десериализации JSON в объект Java используется метод
readValue(): MyClass obj = objectMapper
.readValue(json MyClass.class);
Какие форматы данных поддерживает ObjectMapper кроме JSON
ObjectMapper может поддерживать форматы YAML XML CSV и CBOR при наличии соответствующих модулей (например jackson-dataformat-yaml jackson-dataformat-xml).
Как настроить ObjectMapper для форматирования JSON с отступами
Чтобы включить форматирование с отступами нужно вызвать метод
enable(SerializationFeature
.INDENT_OUTPUT)
: objectMapper
.enable(SerializationFeature
.INDENT_OUTPUT);
Как обрабатывать неизвестные поля при десериализации с ObjectMapper
Чтобы игнорировать неизвестные поля используйте настройку:
objectMapper
.configure(DeserializationFeatur
.FAIL_ON_UNKNOWN_PROPERTIES false);
Как работать с аннотациями Jackson и ObjectMapper
Jackson поддерживает аннотации такие как
@JsonProperty
@JsonIgnore
@JsonInclude
и другие для управления сериализацией и десериализацией.
Эти аннотации можно применять к полям и методам объектов Java.
Как сериализовать/десериализовать список объектов с помощью ObjectMapper
Для сериализации/десериализации списков можно использовать TypeReference:
List list = objectMapper
.readValue(json new TypeReference>(){});
Как добавить модуль в ObjectMapper
Для добавления модуля (например для поддержки Java 8 типов) используйте метод registerModule():
objectMapper
.registerModule(new JavaTimeModule());
Как настроить обработку дат и времени в ObjectMapper
Для работы с Java 8 типами дат (например LocalDate) можно подключить модуль JavaTimeModule и настроить форматирование через аннотацию @JsonFormat или глобально через
objectMapper
.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS false);
Как сериализовать только непустые поля с ObjectMapper
Для сериализации только непустых полей используется настройка:
objectMapper
.setSerializationInclusion(JsonInclude
.Include.NON_NULL);
Как настроить обработку циклических зависимостей (bidirectional relationships) с помощью ObjectMapper
Для предотвращения ошибок при сериализации циклических зависимостей (например в отношениях @OneToMany и @ManyToOne) можно использовать аннотации @JsonManagedReference и @JsonBackReference либо подключить модуль JacksonAnnotationIntrospector для автоматической обработки.
Как настроить кастомный сериализатор для поля/класса с ObjectMapper
Для настройки кастомного сериализатора создайте класс реализующий интерфейс JsonSerializer и примените его через аннотацию @JsonSerialize(using = MyCustomSerializer.class) к нужному полю или классу.
Как сериализовать объекты в виде дерева JSON (JsonNode)
ObjectMapper может сериализовать объект в дерево JSON с помощью метода valueToTree() возвращая JsonNode: JsonNode node = objectMapper.valueToTree(obj);