如何处理Ktor中的请求正文错误



我是Ktor的新手,我有一个带有请求体的路由,我正在使用Kotlin Serialization进行解析。

我知道请求主体应该符合请求主体数据类,但后来,我在测试负载中传递了错误的字段,导致应用程序崩溃。

我希望能够处理这样的场景,并向客户回应这样的字段是不允许的。我该怎么办。

这是我的示例数据类:

@kotlinx.serialization.Serializable
data class UserLoginDetails(
var email: String = "",
var password: String = ""
)

这是路线:

post("/user/login") {
val userInfo  = call.receive<UserLoginDetails>()
//my code here
}

下面的有效载荷工作

{
"email": "test@email.com",
"password": "password"
}

但如果使用替代有效载荷,例如:

{
"phone": "test@email.com",
"password": "password"
}

应用程序崩溃,并显示崩溃消息:

kotlin.serialization.json.internal.JsonDecodingException:意外偏移量为7的JSON令牌:遇到未知密钥"emai"。使用"Json{}"生成器中的"ignoreUnknownKeys=true"将忽略未知键。

Ktor中有两个选项:

  1. call.receive是可以抛出异常的函数。在这种情况下,您可以简单地捕获它:
try {
val userInfo = call.receive<UserLoginDetails>()
} catch (t: Throwable) {
// handle error
}
  1. 使用状态页全局捕获异常:
install(StatusPages) {
exception<SerializationException> { cause ->
call.respond(/* */)
}
}

错误消息说,您可以在创建Json对象的配置ignoreUnknownKeys = true中设置Json。这是文档链接。

提示:您可能还想检查其他配置选项,这样就可以避免将空字符串设置为默认值。

相关内容

  • 没有找到相关文章

最新更新