Чтение из строки в Java
Текст JSON хранит только данные, без методов класса.
Метод readValue у ObjectMapper
принимает строку и класс Java, проверяет ключи и типы
значений, затем создаёт экземпляр через конструктор
или фабрику record.
Пусть в памяти уже есть готовая строка с описанием склада. Её можно разобрать без предварительной записи того же объекта:
import com.fasterxml.jackson.databind.ObjectMapper;
public record StorageUnit(String code, int capacity) {}
public class Main {
public static void main(String[] args) throws Exception {
String raw = "{\"code\":\"W-3\",\"capacity\":40}";
ObjectMapper mapper = new ObjectMapper();
StorageUnit unit = mapper.readValue(raw, StorageUnit.class);
System.out.println(unit.code());
System.out.println(unit.capacity());
}
}
После разбора компоненты доступны как у обычного
экземпляра: code и capacity
совпадают с тем, что было в JSON. Второй аргумент
StorageUnit.class указывает целевой тип.
Круг «запись - чтение» часто проверяют на одном объекте: сначала получают строку, затем восстанавливают значение и сравнивают поля:
import com.fasterxml.jackson.databind.ObjectMapper;
public record StorageUnit(String code, int capacity) {}
public class Main {
public static void main(String[] args) throws Exception {
StorageUnit original = new StorageUnit("W-9", 12);
ObjectMapper mapper = new ObjectMapper();
String raw = mapper.writeValueAsString(original);
StorageUnit restored = mapper.readValue(raw, StorageUnit.class);
System.out.println(original.equals(restored));
}
}
Для корректного JSON вывод будет true:
восстановленный StorageUnit совпадает
с исходным по правилам record. Если в тексте
лишний ключ или неверный тип числа, разбор завершится
исключением Jackson.
Дана строка JSON:
String raw = "{\"label\":\"pro\",\"level\":2}";
Объявите record Badge с компонентами
label и level. Из этой строки получите объект
и выведите оба поля на отдельных строках.
Создайте Badge с меткой "trial"
и уровнем 0, запишите его в текст, затем
разберите текст обратно. Выведите true,
если исходный и восстановленный объект равны.