Kotlin 语言参考文档 中文版 Help

使用 Kotlin 创建 Spring Boot 项目

本教程的第 1 部分演示如何在 IntelliJ IDEA 中使用 Project Wizard 创建一个 Spring Boot 的 Gradle 项目.

开始之前的准备

下载并安装 IntelliJ IDEA Ultimate Edition 的最新版.

创建 Spring Boot 项目

使用 IntelliJ IDEA Ultimate Edition 中的 Project Wizard, 创建新的使用 Kotlin 的 Spring Boot 项目:

  1. 在 IntelliJ IDEA 中, 选择 File | New | Project.

  2. 在左侧面板中, 选择 New Project | Spring Boot.

  3. New Project 窗口中, 指定以下项目和选项:

    • Name: demo

    • Language: Kotlin

    • Type: Gradle - Kotlin

    • Package name: com.example.demo

    • JDK: Java JDK

    • Java: 17

    创建 Spring Boot 项目
  4. 确认填写了所有的项目, 然后点击 Next.

  5. 选择以下依赖项, 本教程将会需要它们:

    • Web | Spring Web

    • SQL | Spring Data JDBC

    • SQL | H2 Database

    设置 Spring Boot 项目
  6. 点击 Create, 生成并设置项目.

  7. 之后, 你可以在 Project view 中看到下面的项目结构:

    设置 Spring Boot 项目

    生成的 Gradle 项目符合 Maven 的标注目录布局:

    • main/kotlin 文件夹下是属于应用程序的包和类.

    • 应用程序的入口点是 DemoApplication.kt 文件的 main() 方法.

查看项目的 Gradle 构建文件

打开 build.gradle.kts 文件: 它是 Gradle Kotlin 构建脚本, 包含应用程序需要的依赖项目列表.

Gradle 文件是用于 Spring Boot 的标准内容, 但它也包含必须的 Kotlin 依赖项, 包括 kotlin-spring Gradle plugin – kotlin("plugin.spring").

下面是完整的脚本, 包括各部分和依赖项的解释:

// build.gradle.kts plugins { kotlin("jvm") version "1.9.25" // 使用的 Kotlin 版本 kotlin("plugin.spring") version "1.9.25" // Kotlin Spring plugin id("org.springframework.boot") version "3.4.5" id("io.spring.dependency-management") version "1.1.7" } group = "com.example" version = "0.0.1-SNAPSHOT" java { toolchain { languageVersion = JavaLanguageVersion.of(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 的 Kotlin 扩展, 用于使用 JSON implementation("org.jetbrains.kotlin:kotlin-reflect") // Kotlin 反射库, 使用 Spring 时需要 runtimeOnly("com.h2database:h2") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.jetbrains.kotlin:kotlin-test-junit5") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } kotlin { compilerOptions { freeCompilerArgs.addAll("-Xjsr305=strict") // `-Xjsr305=strict` 对 JSR-305 注解启用 strict 模式 } } tasks.withType<Test> { useJUnitPlatform() }

你可以看到, Gradle 构建文件中添加了几个与 Kotlin 相关的库:

  1. plugins 代码段中, 有 2 个 Kotlin 库:

    • kotlin("jvm") – 这个 plugin 定义在项目中使用的 Kotlin 版本

    • kotlin("plugin.spring") – Kotlin Spring 编译器 plugin, 用于向 Kotlin 类添加 open 修饰符, 使它们能够与 Spring Framework 中的功能兼容

  2. dependencies 代码段中, 有几个 Kotlin 相关的模块:

    • com.fasterxml.jackson.module:jackson-module-kotlin – 这个模块支持Kotlin 类和数据类的序列化和反序列化

    • org.jetbrains.kotlin:kotlin-reflect – Kotlin 反射库

  3. 在依赖项之后, 你可以看到 kotlin plugin 配置模块. 在这里你可以向编译器添加额外的参数, 来启用或禁用某些语言特性.

关于 Kotlin 编译器选项, 详情请参见 Kotlin Gradle plugin 中的编译器选项.

查看生成的 Spring Boot 应用程序

打开 DemoApplication.kt 文件:

// DemoApplication.kt 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) }
声明类 – DemoApplication 类

在包声明和 import 语句之后, 你可以看到第一个类声明, class DemoApplication.

在 Kotlin 中, 如果一个类不包含任何成员 (属性或函数), 你可以直接省略掉类的主体部分 ({}).

@SpringBootApplication 注解

@SpringBootApplication 注解 在 Spring Boot 应用程序中是一个很方便的注解. 它会启用 Spring Boot 的 自动配置, 组件扫描, 而且可以对 "应用程序类" 定义额外的配置.".

程序入口点 – main()

main() 函数是应用程序的入口点.

它声明为在 DemoApplication 类之外的一个 顶层函数. main() 函数调用 Spring 的 runApplication(*args) 函数, 使用 Spring Framework 来启动应用程序.

可变参数 – args: Array<String>

查看 runApplication() 函数的声明, 你会看到函数的参数标记了 vararg 修饰符: vararg args: String. 这表示, 你可以向这个函数传递可变数量的字符串参数.

展开(spread)操作符 – (*args)

argsmain() 函数的参数, 它声明为一个字符串数组. 由于存在的是字符串的数组, 而你想要将它的内容传递给函数, 请使用展开(spread)操作符 (在数组之前加上星号 *).

创建 Controller

应用程序已经可以运行了, 但我们先来更新它的逻辑.

在 Spring 应用程序中, Controller 用来处理 Web 请求. 在相同的包中, 在 DemoApplication.kt 文件的旁边, 创建 MessageController.kt 文件, 其中包含 MessageController 类, 如下:

// MessageController.kt package com.example.demo import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController @RestController class MessageController { @GetMapping("/") fun index(@RequestParam("name") name: String) = "Hello, $name!" }
@RestController 注解

你需要告诉 Spring, MessageController 是一个 REST Controller, 因此你应该对它标注 @RestController 注解.

这个注解表示这个类将会被组件扫描识别, 因为它和我们的 DemoApplication 类处在相同的包内.

@GetMapping 注解

@GetMapping 标注 REST Controller 的函数, 它实现了与 HTTP GET 调用对应的 endpoint:

@GetMapping("/") fun index(@RequestParam("name") name: String) = "Hello, $name!"
@RequestParam 注解

函数参数 name 标注了 @RequestParam 注解. 这个注解表示方法参数应该绑定到一个 Web 请求参数.

因此, 如果你访问应用程序的根路径, 并提供一个请求名为 "name" 的参数, 例如 /?name=<your-value>, 这个参数值将会被用做调用 index() 函数时的参数.

单表达式函数 – index()

由于 index() 函数只包含一条语句, 你可以将它声明为一个 单表达式函数.

意思就是说, 大括号可以省略, 函数体直接放在等号 = 之后.

函数返回值的类型推断

index() 函数没有明确声明返回类型. 编译器会查看等号 = 右侧语句的结果, 以此推断返回类型.

Hello, $name! 表达式的类型是 String, 因此函数的返回类型也是 String.

字符串模板 – $name

Hello, $name! 表达式在 Kotlin 中称为 字符串模板.

字符串模板是字符串的字面值, 其中包含内嵌的表达式.

对于字符串的拼接操作, 这是一个很方便的替代方法.

运行应用程序

Spring 应用程序现在可以运行了:

  1. DemoApplication.kt 文件中, 点击 main() 方法侧栏中的绿色 Run 图标:

    运行 Spring Boot 应用程序

    这样会在你的计算机上启动本地服务器.

  2. 应用程序启动后, 请打开以下 URL:

    http://localhost:8080?name=John

    你会看到输出的结果 "Hello, John!":

    Spring 应用程序的应答

下一步

本教程的下一部分中, 你将学习 Kotlin 数据类, 以及如何在你的应用程序中使用.

阅读下一章

2025/08/04