Ответ
В контексте тестирования 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.