综合练习
Spring Boot + 协程 REST API。
40 分钟
综合练习
把语法、空安全、集合、协程与 Spring Boot 串起来,完成一个带协程的 REST API 小项目,并规划下一步学习。
学习目标
- 完成 Spring Boot + Kotlin + 协程 REST API
- 能描述「请求 → Controller → Service → 返回 JSON」的链路
- 知道 Android 与后端 Kotlin 的进阶路线
项目:课时 API(Spring Boot + 协程)
需求:
data class Lesson(slug, title, order)与Track(slug, title, lessons)TrackService用内存Map存储,提供findBySlug、listLessonsTrackController暴露GET /api/tracks/{slug}/lessons,内部用协程模拟 IO 延迟- 返回
List<Lesson>JSON
@RestController
@RequestMapping("/api/tracks")
class TrackController(private val service: TrackService) {
@GetMapping("/{slug}/lessons")
suspend fun listLessons(@PathVariable slug: String): List<Lesson> {
return service.listLessons(slug)
}
}
@Service
class TrackService {
private val store = mapOf(
"kotlin-essentials" to Track(
"kotlin-essentials", "Kotlin 语言入门",
listOf(
Lesson("kt-intro", "Kotlin 是什么", 1),
Lesson("kt-syntax", "基础语法", 2)
)
)
)
suspend fun listLessons(slug: String): List<Lesson> {
kotlinx.coroutines.delay(50) // 模拟 IO
return store[slug]?.lessons ?: emptyList()
}
}
data class Track(val slug: String, val title: String, val lessons: List<Lesson>)
data class Lesson(val slug: String, val title: String, val order: Int)
启动后访问 GET http://localhost:8080/api/tracks/kotlin-essentials/lessons 验证。
项目:Console 版(选做)
不用 Spring,用纯 Kotlin + 协程:
TrackCatalog管理List<Lesson>main用runBlocking并发「加载」多个 track 的 lessons- 打印排序后的课时列表
本 track 与相关课的分工
| 主题 | kotlin-essentials | 其他 |
|---|---|---|
| 语法、空安全、集合 | ✅ 本 track | java-fundamentals 对照 |
| 协程、Flow | ✅ 本 track | 深入见 kotlinx 文档 |
| Spring Boot 工程 | 入门 |