Как игнорировать новые поля при десериализации JSON в существующий Java-объект

«Как игнорировать новые поля при десериализации JSON в существующий Java-объект» — вопрос из категории Java, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При написании автотестов на Java часто приходится десериализовать JSON-ответы от API. Если API эволюционирует и добавляет новые поля, которые отсутствуют в вашей модели, можно настроить парсер на игнорирование неизвестных свойств. Это предотвратит падение тестов из-за таких изменений.

Основные подходы с использованием Jackson:

  1. Аннотация на уровне класса (наиболее частый способ в тестовых моделях):

    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class ApiResponse {
       private String id;
       private String status;
       // Геттеры и сеттеры
    }
    
    // Десериализация
    ObjectMapper mapper = new ObjectMapper();
    ApiResponse response = mapper.readValue(jsonString, ApiResponse.class);
  2. Глобальная настройка ObjectMapper (удобно для централизованной конфигурации в тестовом фреймворке):

    import com.fasterxml.jackson.databind.DeserializationFeature;
    
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

Практический пример в контексте тестирования: Допустим, мы тестируем REST API, которое возвращает данные о пользователе. Наша тестовая модель содержит только поля, необходимые для проверок.

@JsonIgnoreProperties(ignoreUnknown = true)
public class UserTestModel {
    private Long id;
    private String email;
    private String role;
    // Новые поля 'phone' или 'avatarUrl', добавленные позже в API, будут проигнорированы
    // Это позволяет старым тестам продолжать работать
}

Важно: Игнорирование неизвестных полей — это стратегия для повышения устойчивости тестов. Однако для новых тестов, которые должны проверять эти поля, нужно явно добавлять их в модель.