我正在尝试在多平台项目中使用 Ktor 进行 Get 调用。这是代码:
private val client = HttpClient()
fun myCall(callback: (List<Film>) -> Unit) {
viewModelScope.launch {
val result:List<Film> = client.get {
url("https://data.sfgov.org/resource/wwmu-gmzc.json")
}
callback(result)
}
}
每次我提出这个请求时,应用程序都会关闭,而且我没有收到任何让我知道发生了什么的消息。如果不是将列表 Film 作为结果类型,而是将 String 放入,那么它可以工作并且我会收到一个电影列表,但是我想将其解析为我自己的对象,但我无法。通话有问题吗?
最佳答案
对于 Ktor http 客户端 至 反序列化为您的自定义对象 ,您需要安装 JsonFeature
在创建您的 http 客户端时,这需要 io.ktor:ktor-client-json
添加了依赖项。
val client = HttpClient {
install(JsonFeature)
}
然后根据您要使用的序列化程序(Ktor 支持 Gson 、 Jackson 和 Kotlinx.Serialization ,您需要添加相应的序列化程序的依赖项)。例如,如果您想使用 Gson
,您需要为 io.ktor:ktor-client-gson
添加依赖项.然后您的 API 响应将反序列化为您的 List<Film>
目的。val result: List<Film> = client.get {
url("https://data.sfgov.org/resource/wwmu-gmzc.json")
}
更多关于 Ktor 的上述内容 documentation
关于json - 如何使用 Ktor 解析响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64537233/