Десериализация JSON в Java: преобразование underscore в camelCase
Быстрый ответ
Чтобы трансформировать имена из snake_case в JSON в camelCase в Java с использованием библиотеки Jackson, необходимо настроить ObjectMapper
, указав стратегию именования SNAKE_CASE:
new ObjectMapper().setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
Для отдельных полей можно применять аннотацию @JsonProperty:
@JsonProperty("json_field") private String jsonField;
Можно выбрать между общим применением или точным контролем для каждого поля в отдельности.
Трансформация snake_case в camelCase с использованием Jackson
Jackson упрощает работу с различиями в правилах именования JSON и Java, предоставляя удобные стратегии именования и позволяя сосредоточиться на написании емкого кода.
Использование @JsonNaming: одна аннотация для стандартизации класса
Если в классе множество полей, имена которых в JSON записаны через подчеркивание, целесообразно применить к всему классу аннотацию @JsonNaming
. Это позволит синхронизировать данные JSON с атрибутами Java:
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class User {
private String firstName; // Ура, в Java уже без нижних подчеркиваний!
private String lastName;
// и другие поля...
}
Глобальная стратегия в Spring Boot
В приложении на Spring Boot можно установить стратегию для всех классов через конфигурационный файл application.properties:
spring.jackson.property-naming-strategy=SNAKE_CASE
Благодаря Spring Boot, ObjectMapper
преобразует "недостатки" в возможности.
Тонкая настройка с ObjectMapper
Для более точной настройки обработки JSON в приложении без Spring Boot, создайте экземпляр ObjectMapper
следующим образом:
@Bean
public ObjectMapper jacksonObjectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
return mapper;
}
Работа со старыми версиями Jackson
В версиях Jackson до 2.7 использовалась стратегия CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
, а между 2.7 и 2.12 — SnakeCaseStrategy
. Jackson развивается вместе с изменяющимися требованиями к программному обеспечению.
Визуализация
Представим, как поля из JSON с подчеркиваниями _sneaky_snakes_
преобразуются в правильно именованные атрибуты Java:
JSON field: | Java field:
--------------------|------------------
`first_name` | `firstName`
`last_username` | `lastUsername`
`user_age` | `userAge`
Верим в магию преобразования 🐍 в 🐫 -Умный программист
Мощность и гибкость Jackson
Jackson предлагает множество инструментов и функций для написания емкого, понятного и эффективного кода при работе с JSON.
Индивидуальное использование @JsonProperty
Если общая стратегия именования не подходит, используйте аннотацию @JsonProperty
. Она особенно актуальна, если имена полей в JSON не соответствуют стандартам именования Java:
@JsonProperty("na_me") private String name; // Уж не окликнешь ли меня "na_me", JSON?
Jackson-у, кажется, все по кайфу: "Все в порядке, я поддерживаю такой формат".
Превентивное устранение ошибок
В процессе маппинга JSON в объекты Java не обойтись без ошибок, поэтому будьте внимательны: изменение имен полей в исходном JSON или опечатки в аннотациях Java могут привести к проблемам.
Все возможности Jackson
Но Jackson – это не только именование. Он предлагает гибкие решения, такие как пользовательские сериализаторы/десериализаторы, возможности игнорирования свойств и другое для решения сложных задач парсинга.
Полезные материалы
- Jackson Annotations – @JsonProperty — подробности о том, как использовать
@JsonProperty
с Jackson. - java – Когда и для чего мне нужно использовать аннотацию @JsonProperty? – Stack Overflow — обсуждение на Stack Overflow о использовании
@JsonProperty
. - Jackson 1.8: как создавать собственные стратегии именования свойств — подходы к созданию пользовательских стратегий названий свойств в Jackson.
- Руководства по Java — как управлять порядком свойств с
@JsonProperty
в Jackson.