如何使用内容谈判将JSON转换为KTOR中的Kotlin对象



我是KTOR的新手,我正在尝试构建一个处理登录凭据的后端。我正在尝试使用内容谈判功能将JSON转换为本机Kotlin对象,但是我一直得到不支持的媒体类型异常。这是我的代码:

fun Application.main() {
    install(CallLogging)
    install(DefaultHeaders)
    install(ContentNegotiation) {
        register(ContentType.Application.Json, GsonConverter())
    }
    routing {
        get("/") {
            call.respondHtml {
                head {
                    title("Kotlin Webapp")
                    script {
                        type = ScriptType.textJScript
                        src = "main.bundle.js"
                    }
                }
                body {
                    div {
                        id = "root"
                    }
                }
            }
        }
        post("/login") {
            val credentials = call.receive<Credentials>()
            println(credentials)
        }
    }
}
data class Credentials(val username: String, val password: String)

这是我要转换的来源JSON,我通过XMLHTTPRequest发送了它:

{"username":"Jamdan2","password":"sometext"}

我已经搜索了网络以寻求答案,但找不到我在做错什么。有人可以帮助吗?

完整性,因为我的评论似乎有所帮助:

您需要确保请求的Content-Type标头设置为正确的值,在这种情况下,application/json,否则服务器不能完全确定该如何处理接收到的内容。

在请求(例如POSTPUT(中,客户端告诉服务器实际发送了哪种类型的数据。

xhr.setRequestHeader("Content-Type", "application/json");

最新更新