將資料類別新增到 Spring Boot 專案
這是 Spring Boot 與 Kotlin 入門教學的第二部分。在繼續之前,請確保您已完成之前的步驟:
使用 Kotlin 建立 Spring Boot 專案
將資料類別新增至 Spring Boot 專案
新增 Spring Boot 專案的資料庫支援
使用 Spring Data CrudRepository 進行資料庫存取
在本教學的這一部分,您將向應用程式新增更多功能,並探索更多 Kotlin 語言特性,例如資料類別 (data classes)。
它需要變更 MessageController
類別,以回應包含序列化物件集合的 JSON 文件。
更新您的應用程式
-
在同一個套件 (package) 中,建立一個
Message.kt
檔案,其中包含具有兩個屬性的資料類別:id
和text
:// Message.kt
package demo
data class Message(val id: String?, val text: String)Message
類別將用於資料傳輸:序列化的Message
物件清單將構成控制器 (controller) 回應瀏覽器請求的 JSON 文件。資料類別 – data class Message
Kotlin 中資料類別 (data classes)的主要目的是保存資料。此類類別標記有 data
關鍵字,並且某些標準功能和某些公用程式函式通常可以從類別結構中機械地推導出來。
在此範例中,您將 Message
宣告為資料類別,因為其主要目的是儲存資料。
val 和 var 屬性
Kotlin 類別中的 屬性 (properties) 可以宣告為:
var
關鍵字val
關鍵字Message
類別使用 val
關鍵字宣告了兩個屬性,id
和 text
。
編譯器將自動為這兩個屬性產生 getter。
建立 Message
類別的實例後,將無法重新賦值這些屬性的值。
可為空類型 – String?
Kotlin 提供了 對可為空類型 (nullable types) 的內建支援。在 Kotlin 中,類型系統區分可以容納 null
的引用(可為空引用 (nullable references))和不能容納 null
的引用(不可為空引用 (non-nullable references))。
例如,類型為 String
的常規變數不能容納 null
。若要允許 null,您可以透過寫入 String?
將變數宣告為可為空的字串。
Message
類別的 id
屬性這次宣告為可為空類型。
因此,可以透過傳遞 null
作為 id
的值來建立 Message
類別的實例:
Message(null, "Hello!")
-
在
MessageController.kt
檔案中,建立listMessages()
函式,該函式會傳回Message
物件的清單,而不是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!"),
)
}
集合 – listOf()
Kotlin 標準函式庫提供了基本集合類型 (collection types) 的實作:集合 (sets)、清單 (lists) 和對應 (maps)。
一對介面 (interfaces) 代表每種集合類型:
Kotlin 標準函式庫也提供了相應的工廠函式 (factory functions) 來建立此類集合的實例。
在本教學中,您可以使用 listOf()
函式來建立 Message
物件的清單。
這是建立物件唯讀 (read-only) 清單的工廠函式:您無法從清單中新增或移除元素。
如果需要在清單上執行寫入運算,請呼叫 mutableListOf()
函式以建立可變清單實例。
尾隨逗號 (Trailing comma)
尾隨逗號 (trailing comma) 是元素系列中最後一個項目之後的逗號符號:
Message("3", "Privet!"),
這是 Kotlin 語法的一個方便功能,並且完全是可選的 – 您的程式碼在沒有它們的情況下仍然可以運作。
在上面的範例中,建立 Message
物件的清單包括最後一個 listOf()
函式引數之後的尾隨逗號。
現在,來自 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 請求。