我正在尝试在多平台项目中与Ktor进行Get call 。这是代码:
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)
}
}
每次我发出此请求时,应用程序都会关闭,并且我不会收到任何消息来告诉我发生了什么。如果我没有将电影列表作为结果类型,而是将字符串放在列表中,那么它可以工作并且收到电影列表,但是我想将其解析为自己的对象,因此无法执行。通话有问题吗?
最佳答案
对于将反序列化到自定义对象的 Ktor http客户端,您需要在创建http客户端时安装JsonFeature
,这需要添加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中的上述更多内容