Skip to content

将数据类添加到 Spring Boot 项目

这是 Spring Boot 和 Kotlin 入门 教程的第二部分。在继续之前,请确保你已完成之前的步骤:


First step 使用 Kotlin 创建 Spring Boot 项目
Second step 将数据类添加到 Spring Boot 项目
Third step 为 Spring Boot 项目添加数据库支持
Fourth step 使用 Spring Data CrudRepository 进行数据库访问

本教程的这一部分,你将向应用程序添加更多功能,并探索更多 Kotlin 语言特性,例如数据类。 这需要更改 MessageController 类,使其能够以包含序列化对象集合的 JSON 文档进行响应。

更新你的应用程序

  1. 在与 DemoApplication.kt 文件相同的包中,创建 Message.kt 文件。

  2. Message.kt 文件中,创建一个具有 idtext 两个属性的数据类:

    kotlin
    // Message.kt
    package com.example.demo
    
    data class Message(val id: String?, val text: String)

    Message 类将用于数据传输:一个序列化的 Message 对象 list 将构成控制器响应浏览器请求的 JSON 文档。

    数据类 – data class Message

    Kotlin 中数据类的主要目的是存储数据。这类类用 data 关键字标记,并且一些标准功能和实用函数通常可以从类结构中机械地派生出来。

    在此示例中,你将 Message 声明为数据类,因为其主要目的是存储数据。

    val 和 var 属性

    Kotlin 中的属性可以声明为:

    • 可变的,使用 var 关键字
    • 只读的,使用 val 关键字

    Message 类使用 val 关键字声明了两个属性:idtext。 编译器将自动为这两个属性生成 getter。 在 Message 类实例创建后,这些属性的值将无法重新赋值。

    可空的类型 – String?

    Kotlin 提供对可空的类型内置支持。在 Kotlin 中,类型系统区分可以持有 null 的引用(可空引用)和不能持有 null 的引用(非空引用)。
    例如,String 类型的普通变量不能持有 null。为了允许 null 值,你可以通过写入 String? 将变量声明为可空的字符串。

    Message 类的 id 属性此次被声明为可空的类型。 因此,可以通过传递 null 作为 id 的值来创建 Message 类的实例:

    kotlin
  3. MessageController.kt 文件中,用返回 Message 对象 list 的 listMessages() 函数替换 index() 函数:

    kotlin
    // MessageController.kt
    package com.example.demo
    
    import org.springframework.web.bind.annotation.GetMapping
    import org.springframework.web.bind.annotation.RequestMapping
    import org.springframework.web.bind.annotation.RestController
    
    @RestController
    @RequestMapping("/")
    class MessageController {
        @GetMapping
        fun listMessages() = listOf(
            Message("1", "Hello!"),
            Message("2", "Bonjour!"),
            Message("3", "Privet!"),
        )
    }
    集合 – listOf()

    Kotlin 标准库为基本集合类型提供实现:set、list 和 map。
    每种集合类型可以是只读的可变的

    • 只读集合提供访问集合元素的操作。
    • 可变集合还提供用于添加、移除和更新其元素的写入操作。

    Kotlin 标准库也提供了相应的工厂函数来创建这些集合的实例。

    在本教程中,你使用 listOf() 函数创建 Message 对象 list。 这是创建只读对象 list 的工厂函数:你无法从 list 中添加或移除元素。
    如果需要对 list 执行写入操作,请调用 mutableListOf() 函数以创建可变 list 实例。

    尾部逗号

    尾部逗号是系列元素中最后一个项之后的逗号符号:

    kotlin

    这是 Kotlin 语法的一个便捷特性,完全是可选的——即使没有它们,你的代码也能正常工作。

    在上面的示例中,创建 Message 对象 list 包含在 listOf() 函数的最后一个实参之后添加的尾部逗号。

MessageController 的响应现在将是一个包含 Message 对象集合的 JSON 文档。

如果 Jackson 库在 classpath 中,Spring 应用程序中的任何控制器默认都会渲染 JSON 响应。 由于你build.gradle.kts 文件中指定了 spring-boot-starter-web 依赖项,因此你获得了 Jackson 作为传递性依赖项。 因此,如果端点返回可以序列化为 JSON 的数据结构,应用程序将以 JSON 文档形式响应。

以下是 DemoApplication.ktMessageController.ktMessage.kt 文件的完整代码:

kotlin
// 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)
}
kotlin
// MessageController.kt
package com.example.demo

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@RequestMapping("/")
class MessageController {
    @GetMapping
    fun listMessages() = listOf(
        Message("1", "Hello!"),
        Message("2", "Bonjour!"),
        Message("3", "Privet!"),
    )
}
kotlin
// Message.kt
package com.example.demo

data class Message(val id: String?, val text: String)

运行应用程序

Spring 应用程序已准备就绪,可以运行:

  1. 再次运行应用程序。

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

    text
    http://localhost:8080

    你将看到一个包含 JSON 格式消息集合的页面:

    运行应用程序

下一步

在本教程的下一部分,你将为你的项目添加和配置数据库,并进行 HTTP 请求。

继续下一章