Jackson
Глобальная настройка ObjectMapper: как управлять сериализацией и десериализацией
Jackson предоставляет удобный способ централизованно настраивать поведение через ObjectMapper. Эта конфигурация позволяет управлять форматированием JSON, обработкой неизвестных полей, null-значений и множеством других аспектов.
Инициализация ObjectMapper
1. Игнорирование неизвестных полей
По умолчанию Jackson выбросит исключение, если в JSON попадётся поле, которого нет в Java-классе.
Это можно отключить так:
Теперь лишние поля будут просто игнорироваться:
2. Красивая печать JSON (Pretty Print)
По умолчанию JSON сериализуется в одну строку. Чтобы включить форматирование с отступами:
Пример вывода:
3. Исключение null-полей
Если нужно убрать из JSON все поля с null, можно настроить так:
Пример:
Результат без email, если он null:
4. Ошибка при отсутствии обязательных полей
По умолчанию Jackson пропускает отсутствующие поля. Но можно требовать их наличия:
5. Написание чисел как строки
Результат:
6. Установка глобального формата дат
Когда это полезно
— В проектах с нестабильными API
— При интеграции с фронтендом, где важно форматирование
— При логировании JSON в читаемом виде
— Для обеспечения устойчивости к изменяющимся данным
#Java #Training #Medium #Jackson #ObjectMapper
Глобальная настройка ObjectMapper: как управлять сериализацией и десериализацией
Jackson предоставляет удобный способ централизованно настраивать поведение через ObjectMapper. Эта конфигурация позволяет управлять форматированием JSON, обработкой неизвестных полей, null-значений и множеством других аспектов.
Инициализация ObjectMapper
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
Можно использовать его напрямую или создать бин (например, в Spring).
1. Игнорирование неизвестных полей
По умолчанию Jackson выбросит исключение, если в JSON попадётся поле, которого нет в Java-классе.
Это можно отключить так:
import com.fasterxml.jackson.databind.DeserializationFeature;
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Теперь лишние поля будут просто игнорироваться:
{
"name": "Alice",
"age": 30,
"extra_field": "ignored"
}
2. Красивая печать JSON (Pretty Print)
По умолчанию JSON сериализуется в одну строку. Чтобы включить форматирование с отступами:
import com.fasterxml.jackson.databind.SerializationFeature;
mapper.enable(SerializationFeature.INDENT_OUTPUT);
Пример вывода:
{
"name" : "Alice",
"age" : 30
}
Это особенно полезно для логирования и отладки.
3. Исключение null-полей
Если нужно убрать из JSON все поля с null, можно настроить так:
import com.fasterxml.jackson.annotation.JsonInclude;
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
Пример:
public class User {
public String name;
public String email; // может быть null
}
Результат без email, если он null:
{
"name": "Alice"
}
4. Ошибка при отсутствии обязательных полей
По умолчанию Jackson пропускает отсутствующие поля. Но можно требовать их наличия:
mapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, true);
mapper.configure(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, true);
5. Написание чисел как строки
mapper.configure(SerializationFeature.WRITE_NUMBERS_AS_STRINGS, true);
Результат:
{
"age": "30"
}
6. Установка глобального формата дат
import java.text.SimpleDateFormat;
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
Когда это полезно
— В проектах с нестабильными API
— При интеграции с фронтендом, где важно форматирование
— При логировании JSON в читаемом виде
— Для обеспечения устойчивости к изменяющимся данным
#Java #Training #Medium #Jackson #ObjectMapper