Создание 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 Repository для доступа к базе данных:
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