如何使用内容协商将 json 转换为 ktor 中的 kotlin 对象?
Posted
技术标签:
【中文标题】如何使用内容协商将 json 转换为 ktor 中的 kotlin 对象?【英文标题】:How do I convert json into a kotlin object in ktor using content negotiation? 【发布时间】:2018-07-23 10:59:30 【问题描述】:我是 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"
我在网上搜索了答案,但找不到我做错了什么。有人可以帮忙吗?
【问题讨论】:
请求的内容类型是否正确? 这似乎是我的问题。谢谢! 【参考方案1】:为了完整起见,因为我的评论似乎有所帮助:
您需要确保将请求的Content-Type
header 设置为正确的值,在本例中为application/json
,否则服务器无法完全确定如何处理接收到的内容。
在请求中(例如
POST
或PUT
),客户端告诉服务器实际发送的是什么类型的数据。
xhr.setRequestHeader("Content-Type", "application/json");
【讨论】:
以上是关于如何使用内容协商将 json 转换为 ktor 中的 kotlin 对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ktor kotlin 通过 POST 发送 JSON 字符串?
如何在 Mashaller 中使用 http 请求标头进行内容协商?
Ktor:如何序列化/反序列化 JSON-API (vnd.api+json)
如何在 Ktor 中设置类似于 Retrofit 的`Retrofit.Builder().baseUrl(baseUrl) 的 basePath?