為 Spring Boot 專案新增 data class
這是 Spring Boot 與 Kotlin 入門教學的第二部分。在繼續之前,請確保您已完成先前的步驟:
使用 Kotlin 建立 Spring Boot 專案
為 Spring Boot 專案新增 data class
為 Spring Boot 專案新增資料庫支援
使用 Spring Data CrudRepository 存取資料庫
在此部分教學中,您將為應用程式新增更多功能,並探索更多 Kotlin 語言特性,例如 data class。 這需要修改 MessageController 類別,使其回傳包含序列化物件集合的 JSON 文件。
更新您的應用程式
在同一個套件中,於
DemoApplication.kt檔案旁邊建立Message.kt檔案。在
Message.kt檔案中,建立一個具有兩個屬性的 data class:id與text:kotlin// Message.kt package com.example.demo data class Message(val id: String?, val text: String)Message類別將用於資料傳輸:序列化的Message物件清單將構成控制器回應瀏覽器請求的 JSON 文件。Data classes – data class Message
Kotlin 中 data class 的主要目的是持有資料。這類類別會標註
data關鍵字,且通常可以從類別結構中機械地推導出一些標準功能和工具函式。在此範例中,您將
Message宣告為 data class,因為它的主要目的是儲存資料。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 型別。 因此,可以在建立Message類別的執行個體時將null作為id的值傳遞:kotlin- 可變,使用
在
MessageController.kt檔案中,將index()函式替換為回傳Message物件清單的listMessages()函式: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 應用程式已準備好執行:
再次執行應用程式。
應用程式啟動後,開啟以下網址:
texthttp://localhost:8080您將看到一個以 JSON 格式顯示訊息集合的頁面:

下一步
在教學的下一部分中,您將為專案新增並配置資料庫,並發送 HTTP 請求。
