Spec-Zone.ru › Kotlin 1.8

Создание RESTful веб-сервиса с базой данных с помощью Spring Boot — учебник

Этот учебник проведет вас через процесс создания простого приложения с Spring Boot и добавления базы данных для хранения информации.

В этом учебнике вы:

  • Создадите приложение с HTTP-точкой входа

  • Научитесь возвращать список объектов данных в формате JSON

  • Создадите базу данных для хранения объектов

  • Используете точки входа для записи и получения объектов из базы данных

Вы можете загрузить и изучить завершенный проект здесь или посмотреть видео этого учебника:

Прежде чем начать

Загрузите и установите последнюю версию IntelliJ IDEA.

Настройка проекта

Используйте Spring Initializr для создания нового проекта:

Вы также можете создать новый проект с помощью IntelliJ IDEA с плагином Spring Boot

  1. Откройте Spring Initializr. Эта ссылка открывает страницу с настройками проекта для этого учебника, уже заполненными. Этот проект использует Gradle, Kotlin, Spring Web, Spring Data JDBC и H2 Database:

    Create a new project with Spring Initializr
  2. Нажмите Сгенерировать в нижней части экрана. Spring Initializr сгенерирует проект с указанными настройками. Загрузка начнется автоматически.

  3. Распакуйте файл .zip и откройте его в IntelliJ IDEA.

    Структура проекта следующая:

    The Spring Boot project structure

    В папке 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 делает это автоматически.

Создание класса данных и контроллера

Для создания точки входа добавьте класс данных и контроллер в свой проект:

  1. В файле DemoApplication.kt создайте класс данных Message с двумя свойствами: id и text:

    data class Message(val id: String?, val text: String)
    
  2. В том же файле создайте класс 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)

Запуск приложения

Приложение готово к запуску:

  1. Нажмите на зеленую иконку Запустить в области слева от метода main() или используйте сочетание клавиш Alt+Enter для вызова меню запуска в IntelliJ IDEA:

    Run the application

    Вы также можете выполнить команду ./gradlew bootRun в терминале.

  2. После запуска приложения откройте следующий URL: http://localhost:8080.

    Вы увидите страницу с коллекцией сообщений в формате JSON:

    Application output

Добавление поддержки базы данных

Для использования базы данных в вашем приложении сначала создайте две точки входа: одну для сохранения сообщений и одну для их получения:

  1. Добавьте аннотацию @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)
    
  2. Используйте 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 в таблице базы данных.

  3. Создайте класс 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() для получения всех сообщений из базы данных

  4. Обновите класс 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 для работы с базой данных.

Настройка базы данных

Настройте базу данных в приложении:

  1. Создайте новую папку sql в папке src/main/resources с файлом schema.sql внутри. Она будет хранить схему базы данных:

    Create a new folder
  2. Обновите файл 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.

  3. Откройте файл 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-клиент:

  1. Запустите приложение. После запуска приложения вы можете выполнить POST-запросы для сохранения сообщений в базе данных.

  2. Создайте файл 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/
    
  3. Выполните все POST-запросы. Используйте зелёную Запуск иконку в области рядом с объявлением запроса. Эти запросы записывают текстовые сообщения в базу данных.

    Run HTTP POST requests
  4. Выполните GET-запрос и просмотрите результат в окне Запуск:

    Run HTTP GET request

Альтернативный способ выполнения запросов

Вы также можете использовать любой другой 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.

Get the Kotlin language map

Для получения материалов вам необходимо будет указать свой адрес электронной почты на следующей странице.

См. также

Для получения дополнительных учебных материалов посетите веб-сайт Spring:

  • Разработка веб-приложений с помощью Spring Boot и Kotlin

  • Spring Boot с Kotlin Coroutines и RSocket

Последнее изменение: 10 января 2023
Вызов Kotlin из Java Тестирование кода с использованием JUnit в JVM — учебник

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API