Spec-Zone.ru › Kotlin 1.7

Создание 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:

    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 ищет метод public static 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.

END_OF_DOCUMENT_MARKER ```

Выполнение 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"

Что дальше?

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

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

  • Spring Boot с Kotlin Coroutines и RSocket

Последнее изменение: 26 сентября 2022
Вызов Kotlin из Java Тестирование кода на JVM с помощью JUnit – руководство

© 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

Spec-Zone.ru

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