将数据类添加到 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
对象 list 将构成控制器响应浏览器请求的 JSON 文档。数据类 – data class Message
Kotlin 中数据类的主要目的是存储数据。这类类用
data
关键字标记,并且一些标准功能和实用函数通常可以从类结构中机械地派生出来。在此示例中,你将
Message
声明为数据类,因为其主要目的是存储数据。val 和 var 属性
Kotlin 中的属性可以声明为:
- 可变的,使用
var
关键字 - 只读的,使用
val
关键字
Message
类使用val
关键字声明了两个属性:id
和text
。 编译器将自动为这两个属性生成 getter。 在Message
类实例创建后,这些属性的值将无法重新赋值。可空的类型 – String?
Kotlin 提供对可空的类型内置支持。在 Kotlin 中,类型系统区分可以持有
null
的引用(可空引用)和不能持有null
的引用(非空引用)。
例如,String
类型的普通变量不能持有null
。为了允许 null 值,你可以通过写入String?
将变量声明为可空的字符串。Message
类的id
属性此次被声明为可空的类型。 因此,可以通过传递null
作为id
的值来创建Message
类的实例:kotlin- 可变的,使用
在
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.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 请求。