使用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为例:
- 根构建配置中添加序列化插件:
plugins { kotlin("jvm") version "你的Kotlin版本号" kotlin("plugin.serialization") version "你的Kotlin版本号" id("io.ktor.plugin") version "你的Ktor版本号" }- 依赖中添加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
相关产品推荐
相关产品推荐

