Создание RESTful веб-сервиса с базой данных с помощью Spring Boot — учебник
Этот учебник проведет вас через процесс создания простого приложения с Spring Boot и добавления базы данных для хранения информации.
В этом учебнике вы:
Создадите приложение с HTTP-точкой входа
Научитесь возвращать список объектов данных в формате JSON
Создадите базу данных для хранения объектов
Используете точки входа для записи и получения объектов из базы данных
Вы можете загрузить и изучить завершенный проект здесь или посмотреть видео этого учебника:
Прежде чем начать
Загрузите и установите последнюю версию IntelliJ IDEA.
Настройка проекта
Используйте Spring Initializr для создания нового проекта:
-
Откройте Spring Initializr. Эта ссылка открывает страницу с настройками проекта для этого учебника, уже заполненными. Этот проект использует Gradle, Kotlin, Spring Web, Spring Data JDBC и H2 Database:

Нажмите Сгенерировать в нижней части экрана. Spring Initializr сгенерирует проект с указанными настройками. Загрузка начнется автоматически.
-
Распакуйте файл .zip и откройте его в IntelliJ IDEA.
Структура проекта следующая:

В папке
main/kotlinнаходятся пакеты и классы, относящиеся к приложению. Точка входа в приложение — методmain()файлаDemoApplication.kt.
Изучение файла сборки проекта
Откройте файл build.gradle.kts.
Это Gradle Kotlin-скрипт сборки, который содержит список зависимостей, необходимых для приложения.
Файл Gradle стандартный для Spring Boot, но также содержит необходимые зависимости Kotlin, включая плагин Gradle kotlin-spring.
Изучение приложения Spring Boot
Откройте файл DemoApplication.kt:
package demo
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
Обратите внимание, что файл Kotlin-приложения отличается от файла Java-приложения:
Хотя Spring Boot ищет публичный статический метод
main(), Kotlin-приложение использует определенную вне классаDemoApplicationверхнеуровневую функцию.Класс
DemoApplicationне объявлен какopen, поскольку плагин kotlin-spring делает это автоматически.
Создание класса данных и контроллера
Для создания точки входа добавьте класс данных и контроллер в свой проект:
-
В файле
DemoApplication.ktсоздайте класс данныхMessageс двумя свойствами:idиtext:data class Message(val id: String?, val text: String)
-
В том же файле создайте класс
MessageResource, который будет обрабатывать запросы и возвращать JSON-документ, содержащий коллекцию объектовMessage:@RestController class MessageResource { @GetMapping("/") fun index(): List<Message> = listOf( Message("1", "Hello!"), Message("2", "Bonjour!"), Message("3", "Privet!"), ) }
Полный код DemoApplication.kt:
package demo
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.data.annotation.Id
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@SpringBootApplication
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
@RestController
class MessageResource {
@GetMapping("/")
fun index(): List<Message> = listOf(
Message("1", "Hello!"),
Message("2", "Bonjour!"),
Message("3", "Privet!"),
)
}
data class Message(val id: String?, val text: String)
Запуск приложения
Приложение готово к запуску:
-
Нажмите на зеленую иконку Запустить в области слева от метода
main()или используйте сочетание клавиш Alt+Enter для вызова меню запуска в IntelliJ IDEA:
-
После запуска приложения откройте следующий URL: http://localhost:8080.
Вы увидите страницу с коллекцией сообщений в формате JSON:

Добавление поддержки базы данных
Для использования базы данных в вашем приложении сначала создайте две точки входа: одну для сохранения сообщений и одну для их получения:
-
Добавьте аннотацию
@Tableк классуMessageдля объявления сопоставления с таблицей базы данных. Добавьте аннотацию@Idперед полемid. Эти аннотации также требуют дополнительных импортов:import org.springframework.data.annotation.Id import org.springframework.data.relational.core.mapping.Table @Table("MESSAGES") data class Message(@Id val id: String?, val text: String) -
Используйте API репозитория Spring Data для доступа к базе данных:
import org.springframework.data.jdbc.repository.query.Query import org.springframework.data.repository.CrudRepository interface MessageRepository : CrudRepository<Message, String>{ @Query("select * from messages") fun findMessages(): List<Message> }Когда вы вызываете метод
findMessages()на экземпляреMessageRepository, он выполнит соответствующий запрос к базе данных:select * from messages
Этот запрос извлекает список всех объектов
Messageв таблице базы данных. -
Создайте класс
MessageService:import org.springframework.stereotype.Service @Service class MessageService(val db: MessageRepository) { fun findMessages(): List<Message> = db.findMessages() fun post(message: Message){ db.save(message) } }Этот класс содержит два метода:
post()для записи нового объектаMessageв базу данныхfindMessages()для получения всех сообщений из базы данных
-
Обновите класс
MessageResource:import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.PostMapping @RestController class MessageResource(val service: MessageService) { @GetMapping("/") fun index(): List<Message> = service.findMessages() @PostMapping fun post(@RequestBody message: Message) { service.post(message) } }Теперь он использует
MessageServiceдля работы с базой данных.
Настройка базы данных
Настройте базу данных в приложении:
-
Создайте новую папку
sqlв папкеsrc/main/resourcesс файломschema.sqlвнутри. Она будет хранить схему базы данных:
-
Обновите файл
src/main/resources/sql/schema.sqlследующим кодом:CREATE TABLE IF NOT EXISTS messages ( id VARCHAR(60) DEFAULT RANDOM_UUID() PRIMARY KEY, text VARCHAR NOT NULL );
Он создает таблицу
messagesс двумя полями:idиtext. Структура таблицы соответствует структуре классаMessage. -
Откройте файл
application.propertiesв папкеsrc/main/resourcesи добавьте следующие свойства приложения:spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:file:./data/testdb spring.datasource.username=sa spring.datasource.password=password spring.datasource.schema=classpath:sql/schema.sql spring.datasource.initialization-mode=always
Эти настройки включают базу данных для приложения Spring Boot. Полный список общих свойств приложения см. в документации Spring.
Выполнение HTTP-запросов
Для работы с ранее созданными конечными точками необходимо использовать HTTP-клиент. В IntelliJ IDEA вы можете использовать встроенный HTTP-клиент:
Запустите приложение. После запуска приложения вы можете выполнить POST-запросы для сохранения сообщений в базе данных.
-
Создайте файл
requests.httpи добавьте следующие HTTP-запросы:### Post 'Hello!" POST http://localhost:8080/ Content-Type: application/json { "text": "Hello!" } ### Post "Bonjour!" POST http://localhost:8080/ Content-Type: application/json { "text": "Bonjour!" } ### Post "Privet!" POST http://localhost:8080/ Content-Type: application/json { "text": "Privet!" } ### Get all the messages GET http://localhost:8080/ -
Выполните все POST-запросы. Используйте зелёную Запуск иконку в области рядом с объявлением запроса. Эти запросы записывают текстовые сообщения в базу данных.

-
Выполните GET-запрос и просмотрите результат в окне Запуск:

Альтернативный способ выполнения запросов
Вы также можете использовать любой другой HTTP-клиент или командную утилиту cURL. Например, вы можете выполнить следующие команды в терминале, чтобы получить тот же результат:
curl -X POST --location "http://localhost:8080" -H "Content-Type: application/json" -d "{ \"text\": \"Hello!\" }"
curl -X POST --location "http://localhost:8080" -H "Content-Type: application/json" -d "{ \"text\": \"Bonjour!\" }"
curl -X POST --location "http://localhost:8080" -H "Content-Type: application/json" -d "{ \"text\": \"Privet!\" }"
curl -X GET --location "http://localhost:8080"
Следующий шаг
Получите свою персональную языковую карту, которая поможет вам ориентироваться в функциях Kotlin и отслеживать ваш прогресс в изучении языка. Мы также вышлем вам советы по языку и полезные материалы по использованию Kotlin с Spring.
См. также
Для получения дополнительных учебных материалов посетите веб-сайт Spring:
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/jvm-spring-boot-restful.html
