Создание проекта Spring Boot с Kotlin
В первой части учебника показано, как создать проект Spring Boot в IntelliJ IDEA с помощью мастера проектов.
Перед началом
Загрузите и установите последнюю версию IntelliJ IDEA Ultimate Edition.
Создание проекта Spring Boot
Создайте новый проект Spring Boot с Kotlin, используя мастера проектов в IntelliJ IDEA Ultimate Edition:
В IntelliJ IDEA выберите Файл | Новый | Проект.
В панели слева выберите Новый проект | Spring Initializr.
-
Укажите следующие поля и опции в окне мастера проектов:
Имя: demo
Язык: Kotlin
Система сборки: Gradle
-
JDK: Java 17 JDK
Java: 17

Убедитесь, что все поля заполнены, и нажмите Далее.
-
Выберите следующие зависимости, которые понадобятся для учебника:
Веб / Spring Web
SQL / Spring Data JDBC
SQL / База данных H2

-
Нажмите Создать, чтобы сгенерировать и настроить проект.
IDE сгенерирует и откроет новый проект. Это может занять некоторое время для загрузки и импорта зависимостей проекта.
-
После этого вы можете увидеть следующую структуру в Представлении проекта:
Сгенерированный проект Gradle соответствует стандартной структуре директорий Maven:
В папке
main/kotlinнаходятся пакеты и классы, относящиеся к приложению.Точкой входа в приложение является метод
main()файлаDemoApplication.kt.
Изучение файла сборки проекта Gradle
Откройте файл build.gradle.kts: это Gradle Kotlin-скрипт сборки, содержащий список зависимостей, необходимых для приложения.
Файл Gradle стандартен для Spring Boot, но также содержит необходимые зависимости Kotlin, включая плагин Gradle kotlin-spring – kotlin("plugin.spring").
Вот полный скрипт с объяснением всех частей и зависимостей:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile // For `KotlinCompile` task below
plugins {
id("org.springframework.boot") version "2.7.1"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
kotlin("jvm") version "1.9.0" // The version of Kotlin to use
kotlin("plugin.spring") version "1.9.0" // The Kotlin Spring plugin
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin") // Jackson extensions for Kotlin for working with JSON
implementation("org.jetbrains.kotlin:kotlin-reflect") // Kotlin reflection library, required for working with Spring
runtimeOnly("com.h2database:h2")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<KotlinCompile> { // Settings for `KotlinCompile` tasks
kotlinOptions { // Kotlin compiler options
freeCompilerArgs = listOf("-Xjsr305=strict") // `-Xjsr305=strict` enables the strict mode for JSR-305 annotations
jvmTarget = "17" // This option specifies the target version of the generated JVM bytecode
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
Как видите, в файл Gradle сборки добавлены несколько артефактов, связанных с Kotlin:
-
В блоке
pluginsесть два артефакта Kotlin:kotlin("jvm")– плагин определяет версию Kotlin, которая будет использоваться в проектеkotlin("plugin.spring")– плагин Kotlin Spring компилятора для добавления модификатораopenк классам Kotlin, чтобы сделать их совместимыми с функциями Spring Framework
-
В блоке
dependenciesперечислены несколько модулей Kotlin:com.fasterxml.jackson.module:jackson-module-kotlin– модуль добавляет поддержку сериализации и десериализации классов и данных классов Kotlinorg.jetbrains.kotlin:kotlin-reflect– библиотека рефлексии Kotlin
После раздела зависимостей вы можете увидеть блок конфигурации задачи
KotlinCompile. Здесь вы можете добавить дополнительные аргументы к компилятору для включения или отключения различных языковых функций.
Изучение сгенерированного приложения 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)
}
- Объявление классов – класс DemoApplication
-
Сразу после объявления пакета и операторов импорта вы можете увидеть первое объявление класса,
class DemoApplication.В Kotlin, если класс не содержит членов (свойств или функций), вы можете опустить тело класса (
{}) для удобства. - @SpringBootApplication аннотация
@SpringBootApplication annotation— это удобная аннотация в приложении Spring Boot. Она включает автоматическую настройку Spring Boot, автонастройку, сканирование компонентов и позволяет определять дополнительную конфигурацию в "классе приложения".- Точка входа программы – main()
-
Функция
main()— это точка входа в приложение.Она объявлена как функция верхнего уровня вне класса
DemoApplication. Функцияmain()вызывает функцию SpringrunApplication(*args)для запуска приложения с использованием Spring Framework. - Аргументы переменной длины – args: Array<String>
Если проверить объявление функции
runApplication(), вы увидите, что параметр функции помечен модификаторомvararg:vararg args: String. Это означает, что вы можете передавать переменное количество строковых аргументов в функцию.- Оператор распространения – (*args)
args— это параметр функцииmain(), объявленный как массив строк. Поскольку у вас есть массив строк, и вы хотите передать его содержимое в функцию, используйте оператор распространения (предшествуйте массиву звездочкой*).
Создание контроллера
Приложение готово к запуску, но давайте сначала обновим его логику.
В приложении Spring контроллер используется для обработки веб-запросов. В файле DemoApplication.kt создайте класс MessageController следующим образом:
@RestController
class MessageController {
@GetMapping("/")
fun index(@RequestParam("name") name: String) = "Hello, $name!"
}
- Аннотация @RestController
-
Вам нужно сообщить Spring, что
MessageControllerявляется контроллером REST, поэтому вы должны пометить его аннотацией@RestController.Эта аннотация означает, что этот класс будет обнаружен сканером компонентов, так как он находится в том же пакете, что и наш класс
DemoApplication. - Аннотация @GetMapping
-
@GetMappingпомечает функции контроллера REST, реализующие конечные точки, соответствующие вызовам HTTP GET:@GetMapping("/") fun index(@RequestParam("name") name: String) = "Hello, $name!" - Аннотация @RequestParam
-
Параметр функции
nameпомечен аннотацией@RequestParam. Эта аннотация указывает, что параметр метода должен быть привязан к параметру веб-запроса.Следовательно, если вы обратитесь к приложению в корневой точке и предоставите параметр запроса с именем «name», как
/?name=<your-value>, значение параметра будет использовано в качестве аргумента для вызова функцииindex(). - Функции с одним выражением – index()
-
Поскольку функция
index()содержит только одно утверждение, вы можете объявить её как функцию с одним выражением.Это означает, что фигурные скобки можно опустить, а тело указано после знака равенства
=. - Выведение типа для типов возврата функций
-
Функция
index()не объявляет тип возврата явно. Вместо этого компилятор выводит тип возврата, посмотрев на результат утверждения справа от знака равенства=.Тип выражения
Hello, $name!равенString, следовательно, тип возврата функции также равенString. - Шаблоны строк – $name
-
Выражение
Hello, $name!называется шаблоном строки в Kotlin.Шаблоны строк — это строковые литералы, содержащие встроенные выражения.
Это удобная замена операциям конкатенации строк.
Вот полный код DemoApplication.kt.
Запуск приложения
Приложение Spring теперь готово к запуску:
-
Нажмите зелёную иконку «Запуск» в метке рядом с методом
main():
Это запустит локальный сервер на вашем компьютере.
-
После запуска приложения откройте следующий URL:
http://localhost:8080?name=John
Вы должны увидеть «Hello, John!» в качестве ответа:
Следующий шаг
В следующей части руководства вы узнаете о классах данных Kotlin и о том, как вы можете использовать их в своем приложении.
Получите карту языка Kotlin
Получите вашу персональную карту языка, чтобы помочь вам в навигации по функциям Kotlin и отслеживании вашего прогресса в изучении языка. Мы также будем отправлять вам советы по языку и полезные материалы по использованию Kotlin с Spring.
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/jvm-create-project-with-spring-boot.html