Как работает Jackson объект

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

Ответ

В контексте тестирования API на Java, Jackson — это ключевая библиотека для работы с JSON. Я использую её в автотестах для сериализации Java-объектов в JSON-запросы и десериализации JSON-ответов обратно в объекты для удобной валидации.

Основной класс — ObjectMapper:

1. Десериализация (JSON -> Java-объект): Это нужно для парсинга ответов от API.

import com.fasterxml.jackson.databind.ObjectMapper;

public class ApiTest {
    private static final ObjectMapper mapper = new ObjectMapper();

    @Test
    public void testUserDeserialization() throws Exception {
        String jsonResponse = "{"id":123, "name":"John", "active":true}";

        // Преобразуем JSON в объект класса User
        User user = mapper.readValue(jsonResponse, User.class);

        // Теперь можем делать assertions
        assertEquals(123, user.getId());
        assertEquals("John", user.getName());
        assertTrue(user.isActive());
    }
}

// Модель данных
class User {
    private int id;
    private String name;
    private boolean active;
    // геттеры и сеттеры обязательны
}

2. Сериализация (Java-объект -> JSON): Для формирования тела POST/PUT запросов.

User newUser = new User();
newUser.setName("Alice");
newUser.setActive(true);

String requestBody = mapper.writeValueAsString(newUser);
// requestBody = {"name":"Alice","active":true}
// Далее отправляем requestBody в HTTP-запросе

Полезные аннотации для тестов:

  • @JsonProperty("full_name") — маппинг поля на другое имя в JSON.
  • @JsonIgnore — игнорировать поле при сериализации/десериализации.
  • @JsonInclude(JsonInclude.Include.NON_NULL) — не включать в JSON поля со значением null.

Обработка ошибок: В тестах я оборачиваю вызовы readValue/writeValue в try-catch или использую assertDoesNotThrow, чтобы корректно обрабатывать случаи, когда API возвращает невалидный JSON.