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, Linux, Hibernate, Collections, Stream API, многопоточность, файлы, Nginx, Apache, maven, gradle, JUnit, YouTube, новости, руководство, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml.