向 Spring Boot 项目添加数据类
这是 Spring Boot 和 Kotlin 入门教程的第二部分。在继续之前,请确保已完成之前的步骤:
使用 Kotlin 创建一个 Spring Boot 项目
向 Spring Boot 项目添加一个数据类(data class)
为 Spring Boot 项目添加数据库支持
使用 Spring Data CrudRepository 进行数据库访问
在本教程的这一部分中,你将向应用程序添加更多功能,并探索更多 Kotlin 语言特性,例如数据类(data class)。
这需要更改 MessageController
类,使其响应包含序列化对象集合的 JSON 文档。
更新你的应用
-
在同一个包(package)中,创建一个
Message.kt
文件,其中包含一个具有两个属性的数据类(data class):id
和text
:// Message.kt
package demo
data class Message(val id: String?, val text: String)Message
类将用于数据传输:序列化的Message
对象列表将构成控制器(controller)将响应浏览器请求的 JSON 文档。数据类(Data classes)– data class Message
Kotlin 中数据类(data classes)的主要目的是保存数据。此类用 data
关键字标记,并且一些标准功能和一些实用函数通常可以从类结构中机械地导出。
在此示例中,你已将 Message
声明为数据类(data class),因为其主要目的是存储数据。
val 和 var 属性(properties)
Kotlin 类中的属性(properties)可以声明为:
var
关键字val
关键字Message
类使用 val
关键字声明了两个属性(properties),即 id
和 text
。
编译器将自动为这两个属性(properties)生成 getter。
创建 Message
类的实例后,将无法重新分配这些属性(properties)的值。
可空类型(Nullable types)– String?
Kotlin 提供了对可空类型(nullable types)的内置支持。在 Kotlin 中,类型系统区分可以包含 null
的引用(可空引用(nullable references))和不能包含 null
的引用(非空引用(non-nullable references))。
例如,String
类型的常规变量不能包含 null
。要允许空值(nulls),你可以通过编写 String?
将变量声明为可空字符串。
Message
类的 id
属性(property)这次声明为可空类型(nullable type)。
因此,可以通过传递 null
作为 id
的值来创建 Message
类的实例:
Message(null, "Hello!")
-
在
MessageController.kt
文件中,创建返回Message
对象列表的listMessages()
函数,而不是index()
函数:// MessageController.kt
package 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!"),
)
}
集合(Collections)– listOf()
Kotlin 标准库提供了基本集合类型(collection types)的实现:集(sets)、列表(lists)和映射(maps)。
一对接口表示每种集合类型(collection type):
Kotlin 标准库还提供了相应的工厂函数(factory functions)来创建此类集合的实例。
在本教程中,你使用listOf()
函数来创建 Message
对象列表。
这是创建对象只读(read-only)列表的工厂函数(factory function):你无法从列表中添加或删除元素。
如果需要在列表上执行写入操作,请调用mutableListOf()
函数来创建可变列表实例。
尾随逗号(Trailing comma)
尾随逗号(trailing comma)是元素系列中最后一项之后的逗号符号:
Message("3", "Privet!"),
这是 Kotlin 语法的一个方便特性,并且是完全可选的 - 没有它们你的代码仍然可以工作。
在上面的示例中,创建 Message
对象列表包括最后一个 listOf()
函数参数之后的尾随逗号(trailing comma)。
现在,来自 MessageController
的响应将是一个 JSON 文档,其中包含 Message
对象的集合。
如果 Jackson 库位于类路径(classpath)中,则 Spring 应用程序中的任何控制器(controller)默认都会呈现 JSON 响应。
正如你在 build.gradle.kts
文件中指定了 spring-boot-starter-web
依赖项一样,你收到了 Jackson 作为传递(transitive)依赖项。
因此,如果端点(endpoint)返回可以序列化为 JSON 的数据结构,则应用程序将响应 JSON 文档。
这是 DemoApplication.kt
、MessageController.kt
和 Message.kt
文件的完整代码:
// DemoApplication.kt
package 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 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 demo
data class Message(val id: String?, val text: String)
运行应用程序
Spring 应用程序已准备好运行:
-
再次运行应用程序。
-
应用程序启动后,打开以下 URL:
http://localhost:8080
你将看到一个页面,其中包含 JSON 格式的消息集合:
下一步
在本教程的下一部分中,你将向项目添加和配置数据库,并发出 HTTP 请求。