Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpJsRc 146 of 322 menu
◀ ▶

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". Разберите эту строку и выведите метку.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить