Имитация API со статическим файлом JSON в Java и Kotlin
Недавно мне пришлось создать API, который должен был возвращать чрезвычайно сложные и вложенные данные. Для создания этого API потребовались бы сотни запросов, и моя команда торопилась. Вот почему мы решили имитировать этот API с файлом JSON, содержащим ожидаемые данные, вручную написанным специалистом по данным.
Я мог бы вернуть файл JSON прямо из API, но это не было идеей. Вместо этого API должен был читать файл JSON из папки проекта, превращать его в объект Java и возвращать сериализованным в JSON, как обычно делал бы любой API Spring Boot. Все это самым быстрым способом и с максимально простой логикой.
Теперь давайте узнаем, как создать API в Spring Boot, который читает статический файл JSON и возвращает его содержимое в формате JSON через Jackson.
Почему API может потребоваться вернуть содержимое файла JSON
Есть как минимум две веские причины, по которым полезно читать содержимое статического файла JSON и возвращать его через API. Давайте покопаемся в них.
- Ваш ответ API никогда не меняется: в этом случае ответ может быть создан только один раз и может быть закэширован в статическом файле JSON. Это особенно полезно, когда ответ API сложный или включает вложенную структуру.
- Чтобы смоделировать ответ API: использование статического файла JSON в качестве источника данных для ответа API — хороший и быстрый способ смоделировать API.
От файла JSON к ответу API в Spring Boot
Давайте теперь посмотрим, как создать API, который читает файл JSON и возвращает его содержимое в Spring Boot, как в Java, так и в Kotlin.
Предпосылки
Во-первых, вы должны добавить commons-io.ommons-io
и org.json
к зависимостям вашего проекта.
Если вы являетесь пользователем Maven, добавьте следующую зависимость в файл POM вашего проекта:
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20220320</version> </dependency>
В противном случае, если вы являетесь пользователем Gradle, добавьте эту зависимость в файл сборки вашего проекта:
implementation group: 'commons-io', name: 'commons-io', version: '2.11.0' implementation group: 'org.json', name: 'json', version: '20220320'
Теперь у вас есть все необходимое для достижения цели обучения.
Создание API, который читает статический файл JSON
Во-первых, давайте посмотрим на статический файл JSON:
Обратите внимание, что это всего лишь простой пример. Ваш статический файл JSON, вероятно, будет намного сложнее.
Затем поместите файл static-data.json
в папку resources
Spring Boot, как показано ниже:
Теперь вы готовы прочитать файл JSON и вернуть его содержимое. Давайте посмотрим, как этого добиться как в Java, так и в Kotlin.
Ява
Котлин
Как видите, ClassPathResource
используется для загрузки static-data.json
в переменную staticDataResource
. Если вы не знакомы с ClassPathResource
, это класс Spring Boot для загрузки ресурсов, размещенных в папке resouces
.
Затем InputStream
представление staticDataResource
передается функции IOUtils.toString()
. Эта вспомогательная функция commons-io
преобразует его в переменную String
.
Наконец, переменная staticDataString
используется для инициализации экземпляра JSONObject
, чье представление Map<String, Objcet>
, полученное с помощью метода toMap()
, возвращается в качестве ответа API.
Объект Map<String, Objcet>
с .toMap()
будет преобразован Джексоном в следующий ответ 200 HTTP content-type: application/json
:
{ "name": "Maria", "surname": "Williams", "age": 35 }
Это точно соответствует содержимому файла static-data.json
.
И вуаля! Вы только что реализовали API, который считывает статический файл JSON и возвращает его содержимое в Spring Boot.
Заключение
В этой статье вы узнали, как использовать статические файлы JSON в приложении Spring Boot Java или Kotlin. В частности, вы увидели, как реализовать API, который считывает статический файл JSON и возвращает его содержимое в формате content-type: application/json
. Это особенно полезно для имитации API в паре строк кода или для реализации API, ответ которых никогда не меняется.
Спасибо за прочтение! Я надеюсь, что вы нашли эту статью полезной. Не стесняйтесь оставлять любые вопросы, комментарии или предложения.