13 марта 2023
Тэги: gradle, Kotlin, PostgreSQL, rest, Spring Boot, Spring Data, YouTube, руководство.
Это первая статья из цикла о создании restful-сервиса на Kotlin, который будет взаимодействовать с СУБД Postgres с помощью Spring Data JPA.
В качестве предметной области выберем города и страны. В одной стране может быть несколько городов. И эту взаимосвязь мы чуть позже отразим в самой базе данных.
Данный материал также доступен на Youtube. Пример проекта вы можете посмотреть на Github.
Давайте создадим заготовку проекта с помощью Spring Initializr. В настройках проекта выбираем Gradle-Kotlin, язык – Kotlin. Версию Spring Boot оставляем по умолчанию. Из зависимостей выбираем Spring Web, Spring Data Jpa и драйвер Postgres.
После того как вы скачаете заготовку проекта и откроете файл build.gradle.kts, то в секции dependencies среди прочих у вас должны быть следующие зависимости:
Пока что мы ещё не добавили настройки подключения к БД, поэтому все зависимости, связанные с базой, временно закомментируем.
Типичный rest-сервис разделяют на 3 слоя:
Начнём проектировать наш Rest API. Будем возвращать список всех стран. Пока ещё хардкодом, без подключения к базе.
Сначала создадим data-класс, в котором будем на уровне rest передавать информацию о стране. Назовём его CountryDto (dto – data transfer object).
В этом классе содержатся числовой id страны, её название и количество людей, в ней проживающих.
Затем создадим CountryService, в котором будет бизнес-логика по обработке данных. Для удобства сначала создаём интерфейс:
Затем его реализацию CountryServiceImpl:
Как видите, список стран мы здесь хардкодим.
Теперь создадим класс контроллера CountryController:
Аннотация @RestController говорит о том, что данный класс реализует REST API. Аннотация @RequestMapping определяет, на какой урл относительно корня «привязано» это API. В данном случае оно будет доступно по адресу http://127.0.0.1:8080/countries. В урлах название сущности обычно указывается во множественном числе.
Обратите внимание, что в конструкторе мы указываем именно интерфейс CountryService, а не реализацию. Если реализация одна, Spring сам найдёт её и подставит в данный сервис. Таким образом мы уменьшаем связанность между слоями.
Далее добавим в контроллер метод getAll():
Здесь мы просто вызываем соответствующий метод сервисного слоя. Аннотация @GetMapping указывает на то, что данный метод доступен через GET-метод протокола http.
Теперь запустим наш проект и выполним GET-запрос:
В ответ получим наш список:
В следующей статье Spring Data JPA, REST и Kotlin: подключение к БД мы научимся считывать данные из базы.
Kotlin, Java, Spring, Spring Boot, Spring Data, SQL, PostgreSQL, Oracle, H2, Linux, Hibernate, Collections, Stream API, многопоточность, чат-боты, нейросети, файлы, devops, Docker, Nginx, Apache, maven, gradle, JUnit, YouTube, новости, руководство, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml.