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

Нажмите СОЗДАТЬ в нижней части экрана. 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 ищет метод public static
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"
Что дальше?
Для получения дополнительных руководств посетите веб-сайт Spring:
© 2010–2022 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