向 Spring Boot 项目添加数据类
这是 Spring Boot 与 Kotlin 入门教程的第二部分。在继续之前,请确保您已完成之前的步骤:
使用 Kotlin 创建 Spring Boot 项目
向 Spring Boot 项目添加数据类
为 Spring Boot 项目添加数据库支持
使用 Spring Data CrudRepository 进行数据库访问
在本教程的这一部分中,您将为应用程序添加更多功能,并了解更多 Kotlin 语言特性,例如数据类。 这需要修改 MessageController 类,使其返回包含序列化对象集合的 JSON 文档。
更新您的应用程序
在同一个包中,在
DemoApplication.kt文件旁边创建一个Message.kt文件。在
Message.kt文件中,创建一个包含两个属性(id和text)的数据类:kotlin// Message.kt package com.example.demo data class Message(val id: String?, val text: String)Message类将用于数据传输:序列化的Message对象列表将构成控制器响应浏览器请求的 JSON 文档。数据类 – data class Message
Kotlin 中数据类的主要目的是保存数据。此类标有
data关键字,某些标准功能和一些实用程序函数通常可以从类结构中机械地推导出来。在本例中,您将
Message声明为数据类,因为其主要目的是存储数据。val 和 var 属性
Kotlin 类中的属性可以声明为:
- 使用
var关键字的可变属性 - 使用
val关键字的只读属性
Message类使用val关键字声明了两个属性:id和text。 编译器将自动为这两个属性生成 getter。 在Message类的实例创建后,将无法重新为这些属性赋值。可为 null 类型 – String?
Kotlin 提供了对可为 null 类型的内置支持。在 Kotlin 中,类型系统区分了可以持有
null的引用(可为 null 引用)和不能持有null的引用(非 null 引用)。
例如,String类型的常规变量不能持有null。要允许为 null,您可以通过编写String?将变量声明为可为 null 的字符串。这次
Message类的id属性被声明为可为 null 类型。 因此,可以通过为id传入null值来创建Message类的实例:kotlin- 使用
在
MessageController.kt文件中,创建listMessages()函数以返回Message对象列表,而不是原来的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对象列表。 这是创建只读对象列表的工厂函数:您无法从列表中添加或移除元素。
如果需要对列表执行写操作,请调用mutableListOf()函数来创建可变列表实例。尾随逗号
尾随逗号是位于一系列元素中最后一个项之后的逗号符号:
kotlin这是 Kotlin 语法中一项方便的特性,完全是可选的——没有它们,您的代码仍然可以运行。
在上面的示例中,创建
Message对象列表时,在最后一个listOf()函数实参后面包含了尾随逗号。
现在,来自 MessageController 的响应将是一个包含 Message 对象集合的 JSON 文档。
如果类路径中存在 Jackson 库,Spring 应用程序中的任何控制器默认都会呈现 JSON 响应。 由于您在
build.gradle.kts文件中指定了spring-boot-starter-webmvc依赖项,您将 Jackson 作为“传递”依赖项引入。 因此,如果端点返回可以序列化为 JSON 的数据结构,应用程序将以 JSON 文档进行响应。
以下是 DemoApplication.kt、MessageController.kt 和 Message.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)
}// 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!"),
)
}// Message.kt
package com.example.demo
data class Message(val id: String?, val text: String)运行应用程序
Spring 应用程序已准备好运行:
再次运行应用程序。
应用程序启动后,打开以下 URL:
texthttp://localhost:8080您将看到一个包含 JSON 格式消息集合的页面:

下一步
在教程的下一部分中,您将为项目添加并配置数据库,并发送 HTTP 请求。
