validation - 在 Ktor 中验证请求
问题描述
我有一个使用 Ktor 制作的 API,当请求的 som 字段失败时,它返回 500 错误,我想检查所有请求数据并返回,在本例中为 422。
请求类:
@Serializable
data class LoginRequest (
val email: String,
val password: String
)
路由
route("v1/auth/login") {
post {
val loginRequest = call.receive<LoginRequest>()
//LOGIN METHOD
}
}
现在 Ktor 显示的错误是:
[eventLoopGroupProxy-4-1] ERROR Application - Unhandled: POST - /v1/auth/login
kotlinx.serialization.MissingFieldException: Field 'password' is required for type with serial name
确保系统不会失败并以 BadRequest 响应的最佳方法是什么?
解决方案
您可以使用默认值使字段为空,在null
遇到未知属性时忽略错误并手动验证结果对象。这是一个例子:
import io.ktor.application.*
import io.ktor.features.*
import io.ktor.http.*
import io.ktor.request.*
import io.ktor.response.*
import io.ktor.routing.*
import io.ktor.serialization.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class LoginRequest (
val email: String? = null,
val password: String? = null
)
suspend fun main() {
embeddedServer(Netty, port = 8080) {
install(ContentNegotiation) {
json(Json {
ignoreUnknownKeys = true
})
}
routing {
post("/") {
val request = call.receive<LoginRequest>()
if (request.email == null || request.password == null) {
call.respond(HttpStatusCode.UnprocessableEntity)
return@post
}
call.respond(HttpStatusCode.OK)
}
}
}.start()
}
推荐阅读
- swift - 更新到 12.2 Exc_Bad_Access 后的 XCODE 模拟器错误(代码=50,地址=0x11b40e1ad)
- python - 如何为 Keras/Tensorflow 机器学习创建(嵌套?)csv 文件加载器?
- javascript - 当子项在 Wordpress 子菜单中处于活动状态时,从父项中删除活动类
- mongodb - 在循环中运行 mongodb 查询
- oracle - Oracle远程连接防火墙KO
- google-sheets - 计算逗号分隔的列列表中的唯一值
- python - URL 不能包含控制字符 - Python
- postgresql - 无法在 postgres 中插入嵌套记录
- reactjs - SetState 外体 reactjs
- python - 如何让熊猫在非均匀 x 网格上执行滚动平均