Spring Boot на Kotlin — первая программа
Spring Boot на Kotlin — первая программа
На JVM Spring Boot — популярный каркас для веб-сервисов, безопасности, работы с БД и облаком. Kotlin в Spring — полноценный язык: те же стартеры, что в Java, плюс data class, null-safety и короче контроллеры.
| Стек | Когда выбирать |
|---|---|
| Ktor | Kotlin-native, явные маршруты, лёгкий старт |
| Spring Boot + Kotlin | Команда на Spring, нужны Security, Data JPA, Spring Cloud |
Java-версия сценария: 271.md. Обзор Spring: 27.md.
Перед стартом: первая программа на Kotlin.
Словарь терминов
| Термин | Простыми словами |
|---|---|
| Spring | Контейнер, который создаёт объекты (бины) и связывает зависимости. |
| Spring Boot | Spring + автоконфигурация + встроенный Tomcat — быстрый старт. |
| Стартер | Готовый набор зависимостей (spring-boot-starter-web). |
@RestController | Класс с HTTP-методами, ответ — JSON. |
@Service | Слой бизнес-логики. |
| Dependency Injection | Spring передаёт HelloService в конструктор контроллера. |
Что получится
GET http://localhost:8080/api/hello?name=Анна → JSON {"message":"Привет, Анна!"}.
Проект (Gradle Kotlin DSL)
start.spring.io: Kotlin, Gradle, Spring Web, Java 17.
plugins {
kotlin("jvm") version "1.9.24"
kotlin("plugin.spring") version "1.9.24"
id("org.springframework.boot") version "3.3.0"
id("io.spring.dependency-management") version "1.1.5"
}
java {
toolchain { languageVersion.set(JavaLanguageVersion.of(17)) }
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
kotlin("plugin.spring") делает классы с аннотациями Spring открытыми для прокси — вручную писать open на каждый класс не нужно.
Точка входа
package com.example.demo
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
| Элемент | Смысл |
|---|---|
@SpringBootApplication | Включить сканирование компонентов и автоконфигурацию. |
runApplication<DemoApplication>(*args) | Kotlin-обёртка над SpringApplication.run. |
*args | Распаковка массива аргументов в vararg. |
Модель и сервис
data class HelloResponse(val message: String)
@Service
class HelloService {
fun greet(name: String?): HelloResponse {
val who = name?.trim().takeUnless { it.isNullOrEmpty() } ?: "мир"
return HelloResponse("Привет, $who!")
}
}
Разбор greet:
name?.trim()— еслиname == null, всё выражениеnull.takeUnless { it.isNullOrEmpty() }— отбросить пустую строку после trim.?: "мир"— значение по умолчанию.data class— Jackson (JSON) сериализует полеmessageавтоматически.
Контроллер
@RestController
@RequestMapping("/api")
class HelloController(private val service: HelloService) {
@GetMapping("/hello")
fun hello(@RequestParam(required = false) name: String?): HelloResponse =
service.greet(name)
}
| Аннотация | Роль |
|---|---|
@RestController | Ответы методов → тело HTTP (JSON). |
@RequestMapping("/api") | Префикс для всех методов класса. |
@GetMapping("/hello") | Обработчик GET /api/hello. |
@RequestParam | Параметр из query: ?name=Анна. |
Конструктор HelloService | Constructor injection — рекомендуемый стиль Spring. |
Сравнение с Ktor: в 221.md маршруты в блоке routing { get(...) }; в Spring — аннотации на методах.
Запуск и проверка
./gradlew bootRun
curl -s "http://localhost:8080/api/hello?name=Анна"
В IDEA: Run DemoApplicationKt.
Kotlin и Java в одном проекте
- Java-классы вызываются из Kotlin без обёрток.
- Для JPA:
kotlin("plugin.jpa")илиallOpen/noArg. - Nullable Kotlin на границе с Java-кодом без аннотаций — риск NPE: проверяйте вход. Подробнее: 233.md.
Частые ошибки
| Симптом | Причина |
|---|---|
Invalid bean definition | Класс final без plugin.spring |
| 404 | Неверный @RequestMapping или порт |
| Кракозябры в JSON | UTF-8: server.servlet.encoding.charset=UTF-8 в application.properties |
Что попробовать
spring-boot-starter-data-jpa— Java JPA.- Spring Security на том же проекте.
- Сравнить объём кода с Ktor на том же API.
Дальше
Kotlin ↔ Java · Ktor · корутины · о разделе
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). История Kotlin - создание языка JetBrains для плавной совместимости с Java и современной разработки. Экосистема Kotlin-приложений - инструменты, фреймворки и мультиплатформенные сценарии разработки. Kotlin — это современный язык программирования общего назначения, который работает на платформе Java Virtual Machine (JVM), а также компилируется в JavaScript или нативный код. Набор советов, правил, принципов и обычаев в разработке на этом языке. Основы Kotlin - архитектура проекта, платформенные модули и базовые принципы разработки на языке. Типизация, набор правил определения типа данных значений языка. Операторы и выражения в Kotlin - логика вычислений, приоритеты операций и идиоматичный стиль записи условий. Циклы и управляющие конструкции в Kotlin - идиоматичные способы итерации, условия и управление выполнением. ООП в Kotlin - классы, модификаторы доступа, наследование и идиоматичное проектирование объектных структур. Кавычки, точки, запятые, скобки и прочие знаки препинания. Kotlin использует набор зарезервированных слов для построения синтаксических конструкций языка. Все ключевые слова разделены на категории по назначению. Набор функций, которые включены в стандартную библиотеку языка.История языка Kotlin
Экосистема Kotlin-приложений
Что требуется знать перед началом изучения языка программирования Kotlin
Рекомендации по разработке на Kotlin
Основы языка Kotlin
Типы данных и объявление переменных
Операторы и выражения в Kotlin
Циклы и управляющие конструкции
Объектно-ориентированное программирование в Kotlin
Синтаксис и пунктуация в Kotlin
Ключевые слова языка Kotlin
Встроенные функции и расширения Kotlin