Десериализация JSON в Java: преобразование underscore в camelCase

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы трансформировать имена из snake_case в JSON в camelCase в Java с использованием библиотеки Jackson, необходимо настроить ObjectMapper, указав стратегию именования SNAKE_CASE:

Java
Скопировать код
new ObjectMapper().setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

Для отдельных полей можно применять аннотацию @JsonProperty:

Java
Скопировать код
@JsonProperty("json_field") private String jsonField;

Можно выбрать между общим применением или точным контролем для каждого поля в отдельности.

Кинга Идем в IT: пошаговый план для смены профессии

Трансформация snake_case в camelCase с использованием Jackson

Jackson упрощает работу с различиями в правилах именования JSON и Java, предоставляя удобные стратегии именования и позволяя сосредоточиться на написании емкого кода.

Использование @JsonNaming: одна аннотация для стандартизации класса

Если в классе множество полей, имена которых в JSON записаны через подчеркивание, целесообразно применить к всему классу аннотацию @JsonNaming. Это позволит синхронизировать данные JSON с атрибутами Java:

Java
Скопировать код
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class User {
    private String firstName;  // Ура, в Java уже без нижних подчеркиваний!
    private String lastName;
    // и другие поля...
}

Глобальная стратегия в Spring Boot

В приложении на Spring Boot можно установить стратегию для всех классов через конфигурационный файл application.properties:

properties
Скопировать код
spring.jackson.property-naming-strategy=SNAKE_CASE

Благодаря Spring Boot, ObjectMapper преобразует "недостатки" в возможности.

Тонкая настройка с ObjectMapper

Для более точной настройки обработки JSON в приложении без Spring Boot, создайте экземпляр ObjectMapper следующим образом:

Java
Скопировать код
@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:

Markdown
Скопировать код
JSON field:         | Java field:
--------------------|------------------
`first_name`        | `firstName`
`last_username`     | `lastUsername`
`user_age`          | `userAge`

Верим в магию преобразования 🐍 в 🐫 -Умный программист

Мощность и гибкость Jackson

Jackson предлагает множество инструментов и функций для написания емкого, понятного и эффективного кода при работе с JSON.

Индивидуальное использование @JsonProperty

Если общая стратегия именования не подходит, используйте аннотацию @JsonProperty. Она особенно актуальна, если имена полей в JSON не соответствуют стандартам именования Java:

Java
Скопировать код
@JsonProperty("na_me") private String name;  // Уж не окликнешь ли меня "na_me", JSON?

Jackson-у, кажется, все по кайфу: "Все в порядке, я поддерживаю такой формат".

Превентивное устранение ошибок

В процессе маппинга JSON в объекты Java не обойтись без ошибок, поэтому будьте внимательны: изменение имен полей в исходном JSON или опечатки в аннотациях Java могут привести к проблемам.

Все возможности Jackson

Но Jackson – это не только именование. Он предлагает гибкие решения, такие как пользовательские сериализаторы/десериализаторы, возможности игнорирования свойств и другое для решения сложных задач парсинга.

Полезные материалы

  1. Jackson Annotations – @JsonProperty — подробности о том, как использовать @JsonProperty с Jackson.
  2. java – Когда и для чего мне нужно использовать аннотацию @JsonProperty? – Stack Overflow — обсуждение на Stack Overflow о использовании @JsonProperty.
  3. Jackson 1.8: как создавать собственные стратегии именования свойств — подходы к созданию пользовательских стратегий названий свойств в Jackson.
  4. Руководства по Java — как управлять порядком свойств с @JsonProperty в Jackson.