Spec-Zone.ru › Kotlin 1.6

Создание 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 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 в таблице базы данных.

  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"

Что дальше?

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

  • Создание веб-приложений с Spring Boot и Kotlin

  • Spring Boot с Kotlin Coroutines и RSocket

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

© 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