Формат представления данных JSON #
Формат представления данных JSON #
Презентацию по теме можно посмотреть по ссылке
Видео-запись: Rutube
Библиотека Jackson #
Презентацию по теме можно посмотреть по ссылке
Видео-запись: Rutube
Документация по теме #
- Библиотека jackson-core.
JsonFactoryBuilder.JsonGenerator.- Модуль jackson-module-kotlin.
ObjectMapper.writeValue.@JsonProperty.@JsonIgnore.
Задание № 1. Использование низкоуровневого интерфейса Jackson #
Создайте функцию fun trianglesToJson(triangles: List<Triangle>): String,
которая принимает список треугольников и возвращает JSON-документ в виде
строки в следующем формате:
{
"triangles": [
{
"description": "обычный треугольник",
"id": "baa30333-23d6-4eba-a8ed-7c235adf4228",
"registrationDateTime": "2024-07-27T00:10:41.129642513"
},
{
"description": "точки расположены на отрезке",
"id": "a6be5e23-b8d4-4d78-8aa3-1c204d0befc8",
"registrationDateTime": "2024-07-10T17:26:41.129567382"
}
]
}Возьмите список всех треугольников из хранилища TriangleStorage
(занятие 6) и выведите полученную строку в стандартный поток вывода вместо
прежнего формата <id> <строковое представление треугольника>. Документ
формируется заново при каждом запуске приложения.
При реализации функции используйте низкоуровневый интерфейс Jackson. Расстановка пробельных символов не проверяется: структура документа (объекты, ключи, значения) должна совпадать с примером.
Задание № 2. Использование средства отображения объектов #
Приложение уже принимает вторым аргументом имя константы перечисления
Color (занятие 6, задание № 3). Измените смысл этого аргумента: теперь он
задаёт цвет границы. Если аргумент указан, приложение выводит сведения
только о треугольниках, у которых совпадает цвет границы. Фильтрация по
цвету заливки больше не используется, прежний формат вывода заменяется
JSON-документом. Если аргумент не указан или не совпадает ни с одной
константой перечисления Color, приложение выводит сообщение об ошибке и
завершает работу с ненулевым кодом возврата (как в занятии 6).
{
"borderColor": "RED",
"triangles": [
{
"id": "a6be5e23-b8d4-4d78-8aa3-1c204d0befc8",
"sideA": 2.0, "sideB": 3.0, "sideC": 5.0
},
{
"id": "baa30333-23d6-4eba-a8ed-7c235adf4228",
"sideA": 2.0, "sideB": 3.0, "sideC": 4.0
}
]
}Для формирования результирующего JSON-документа используйте высокоуровневый интерфейс представления. Создайте два дополнительных класса:
- класс-обёртку, описывающий документ целиком: свойство
borderColorтипаColorи свойствоtrianglesтипаList<...>; - класс, описывающий треугольник в выводе: свойства
id(типUUID),sideA,sideB,sideC(типDouble).
Имена свойств этих классов должны совпадать с ключами из примера; при
необходимости задайте их аннотацией @JsonProperty.
Остальные свойства исходного класса Triangle в вывод не попадают: исключите
их с помощью аннотации @JsonIgnore либо выносите в отдельный класс только
нужные свойства. Для записи результата используйте
mapper.writeValue(System.out, wrapper). Расстановка пробельных символов не
проверяется: структура документа (объекты, ключи, значения) должна совпадать
с примером.