You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ktor发送POST请求报500错误,Customer类序列化异常求助

问题原因

你贴出的代码中Customer、Order类均未添加@Serializable注解,仅OrderItem正确添加了该注解。GET请求可以正常返回是因为Ktor响应序列化可通过反射机制完成,无需类显式标注序列化注解;但POST请求执行call.receive<T>()反序列化请求体时,kotlinx.serialization要求目标类必须标注@Serializable注解才能自动生成对应的序列化器,否则就会抛出你遇到的异常。

解决方案
  • 给Customer、Order类添加kotlinx.serialization.Serializable注解,修改后代码如下:
    // Customer类修改后
    import kotlinx.serialization.Serializable
    
    @Serializable
    data class Customer(
        val id : String,
        val firstName : String,
        val lastName : String,
        val email : String,
    )
    val customerStorage = mutableListOf<Customer>()
    
    // Order类修改后
    @Serializable
    data class Order(
        val number: String, // 该字段会存储带横线的编号
        val contents : List<OrderItem>,
    )
    
  • 检查项目构建配置是否正确引入了kotlin序列化插件和相关依赖,以Gradle Kotlin DSL为例:
    1. 根构建配置中添加序列化插件:
    plugins {
        kotlin("jvm") version "你的Kotlin版本号"
        kotlin("plugin.serialization") version "你的Kotlin版本号"
        id("io.ktor.plugin") version "你的Ktor版本号"
    }
    
    1. 依赖中添加Ktor内容协商和kotlinx序列化依赖:
    dependencies {
        implementation("io.ktor:ktor-server-content-negotiation")
        implementation("io.ktor:ktor-serialization-kotlinx-json")
    }
    
  • 确认Ktor启动类中已经正确安装ContentNegotiation插件并配置json序列化:
    import io.ktor.server.plugins.contentnegotiation.*
    import io.ktor.serialization.kotlinx.json.*
    
    // 启动类配置中添加
    install(ContentNegotiation) {
        json()
    }
    

全部修改完成后重新构建项目即可解决该异常。

内容的提问来源于stack exchange,提问作者Rajat Bhardwaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:06:03