Record и JSON в Java
Record описывает неизменяемую запись данных:
компоненты в заголовке, конструктор и методы доступа
генерирует компилятор. Jackson воспринимает компоненты
как свойства с теми же именами, что и ключи JSON.
Для ответа API с ISBN и числом страниц достаточно короткого объявления без геттеров и сеттеров:
public record BookCopy(String isbn, int pages) {}
Запись и чтение через один ObjectMapper
симметричны: строка содержит оба ключа, а после
readValue сравнение equals
проверяет совпадение компонентов:
import com.fasterxml.jackson.databind.ObjectMapper;
public record BookCopy(String isbn, int pages) {}
public class Main {
public static void main(String[] args) throws Exception {
BookCopy book = new BookCopy("978-3", 200);
ObjectMapper mapper = new ObjectMapper();
String raw = mapper.writeValueAsString(book);
BookCopy back = mapper.readValue(raw, BookCopy.class);
System.out.println(book.equals(back));
System.out.println(back.isbn());
}
}
Аннотации Jackson, как @JsonProperty или
@JsonIgnore, ставят прямо на компоненты
record. Поведение record в обычном коде не меняется:
объект по-прежнему нельзя мутировать после создания.
Если нужны значения по умолчанию для пропущенных ключей, record менее удобен, чем класс с полями. Для полного совпадения схемы JSON и неизменяемости данных record остаётся типичным выбором в Java 27.
Объявите record GeoTag с
lat и lon типа double.
Запишите точку 55.75 и 37.62
в JSON, разберите строку обратно и выведите
true, если объекты равны.
Дана строка JSON:
String raw = "{\"lat\":1.0,\"lon\":2.0,\"name\":\"base\"}";
Добавьте к GeoTag компонент label,
который в JSON называется "name". Разберите эту строку
и выведите метку.