使用 Ktor 发送发布请求时出现内部服务器错误
Posted
技术标签:
【中文标题】使用 Ktor 发送发布请求时出现内部服务器错误【英文标题】:Internal server error while sending a post request with Ktor 【发布时间】:2021-12-19 16:09:41 【问题描述】:我正在尝试制作一个允许我查询所有元素的简单 API。它列出了客户和订单的所有数据。
我有针对客户和订单的 GET、POST、DELETE 路线。这些订单和客户是数据类。现在,当我尝试发送发布请求时,它会给出 500 INTERNAL SERVER ERROR 并给出此错误
kotlinx.serialization.SerializationException:找不到类“客户”的序列化程序。`
但我已经用@Serializable
注释了我的Customer
类。
我的 GET 请求正常工作。
客户数据类
data class Customer(
val id : String,
val firstName : String,
val lastName : String,
val email : String,
)
val customerStorage = mutableListOf<Customer>()
订单数据类
data class Order(
val number: String, //Because it will contain a number with dashes
val contents : List<OrderItem>,
)
@Serializable
data class OrderItem(
val item : String,
val amount : Int, //what is the amount of each item in each order
val price : Double,
)
//place to store our orders
val orderStorage = listOf(Order(
"2020-04-06-01", listOf(
OrderItem("Ham Sandwich",2,5.50),
OrderItem("Water",1,1.50),
OrderItem("Beer",3,2.30),
OrderItem("Cheesecake", 1,3.75)
)
),
Order("2020-04-03-01", listOf(
OrderItem("Cheeseburger",1,8.50),
OrderItem("Water", 2,1.50),
OrderItem("Coke",2,1.76),
OrderItem("Ice Cream", 1,2.35)
))
)
客户的发布路线
post
val customer = call.receive<Customer>()
customerStorage.add(customer)
call.respondText("Customer stored correctly", status = HttpStatusCode.Created)
我指的是this tutorial
【问题讨论】:
请检查您是否添加了kotlinx.serialization
Gradle 插件github.com/Kotlin/kotlinx.serialization#using-the-plugins-block 并使用适当的转换器ktor.io/docs/kotlin-serialization.html#register_converter 安装了ContentNegotiation
插件。
感谢Aleksei Tirman 回复此问题。我已经检查过了,我已经添加了kotlinx.serialization
Gradle 插件,因为我需要的转换器仅适用于 JSON,所以我已经安装了带有 JSON 转换器的ContentNegotiation
。
由于我无法重现您的问题,能否请您分享您的项目?
【参考方案1】:
我还指的是您提到的教程。我遇到了同样的错误。我将 ktor_version=1.6.5 更改为 ktor_version=1.6.1 并运行了该项目。效果很好。
我认为 kotr 版本 1.6.5 存在一些问题。
另外,不要忘记在 build.gradle.kts 文件中添加kotlin("plugin.serialization") version "1.6.0"
。它应该是这样的:
plugins
application
kotlin("jvm") version "1.6.0"
kotlin("plugin.serialization") version "1.6.0"
【讨论】:
以上是关于使用 Ktor 发送发布请求时出现内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章
向本地服务器发送请求时出现 Flutter Web XMLHttpRequest 错误
在 wcf rest 中发送 xml 请求时出现错误请求 400
在 Heroku 上部署 ktor 应用程序时出现 JDBC_DATABASE_URL 错误