CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Kotlin 语言入门/课时/Ktor 服务端
RawBlame
课时目录12 节

Kotlin 语言入门

  1. 01Kotlin 是什么
  2. 02基础语法与类型
  3. 03控制流
  4. 04函数与 Lambda
  5. 05集合 API
  6. 06类与 OOP
  7. 07空安全
  8. 08协程
  9. 09JVM 与 Spring
  10. 10Android 与 Compose
  11. 11Ktor 服务端
  12. 12综合练习

Ktor 服务端

Ktor、文件 I/O、Quarkus 概览。

30 分钟

Ktor 服务端

Ktor 是 JetBrains 出品的 Kotlin 原生 Web 框架,协程优先、轻量灵活;Quarkus 等也支持 Kotlin,适合微服务与 API 网关。

学习目标

  • 了解 Ktor 的基本路由与插件
  • 会用协程处理 HTTP 请求
  • 知道 Ktor 与 Spring Boot 的选型差异

Ktor 入门

import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import io.ktor.serialization.kotlinx.json.*
import io.ktor.server.plugins.contentnegotiation.*
import kotlinx.serialization.Serializable

@Serializable
data class Track(val slug: String, val title: String, val lessonCount: Int)

fun main() {
    embeddedServer(Netty, port = 8080) {
        install(ContentNegotiation) { json() }

        routing {
            get("/") {
                call.respondText("Hello, CodeRoadMap!")
            }
            get("/api/tracks/{slug}") {
                val slug = call.parameters["slug"] ?: return@get call.respondText("Missing slug", status = io.ktor.http.HttpStatusCode.BadRequest)
                val track = findTrack(slug)
                if (track != null) call.respond(track)
                else call.respondText("Not found", status = io.ktor.http.HttpStatusCode.NotFound)
            }
        }
    }.start(wait = true)
}

fun findTrack(slug: String): Track? =
    if (slug == "kotlin-essentials") Track(slug, "Kotlin 语言入门", 12)
    else null

embeddedServer 启动 Netty;routing 定义路由;ContentNegotiation 自动 JSON 序列化。

协程与文件 I/O

import io.ktor.server.application.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.File

fun Application.configureFileRoutes() {
    routing {
        get("/api/lessons/export") {
            val content = withContext(Dispatchers.IO) {
                File("lessons.json").readText()
            }
            call.respondText(content, contentType = io.ktor.http.ContentType.Application.Json)
        }
    }
}

阻塞 IO 用 withContext(Dispatchers.IO) 切换到 IO 调度器,不阻塞 Netty 事件线程。

Ktor vs Spring Boot

维度KtorSpring Boot
风格轻量、协程原生全功能、生态成熟
学习曲线低,代码量少中,注解驱动
适用API 网关、微服务、原型企业 CRUD、复杂业务
与 Java 生态可集成 Exposed、Koin无缝用 MyBatis、JPA

CodeRoadMap 主线仍是 Spring Boot;Ktor 适合 Kotlin 原生小服务或学习协程 Web 编程。

与 Java 对照

KtorSpring Boot (Java)
routing { get { } }@GetMapping
call.respond(dto)return ResponseEntity.ok(dto)
install(Plugin)@Configuration + Bean
withContext(IO)@Async / Virtual Thread
kotlinx.serializationJackson

练习

  • 用 Ktor 创建 /api/tracks 返回 track 列表 JSON
  • 添加 POST /api/tracks 接收 JSON 创建 track(内存存储即可)
  • 对比 Ktor 与 Spring Boot 的 Controller 写法

小结

Ktor = Kotlin 原生 + 协程 + 轻量 Web。 下一课综合练习。见 kotlin-essentials。

加载本节练习…
← 上一课Android 与 Compose下一课 →综合练习