当 GET returns null 而不是 List 时,KotlinxSerializer 出现 NullPointerException
NullPointerException at KotlinxSerializer when GET returns null instead of a List
我正在使用 Ktor 获取这样的列表,在某些情况下 returns null。
override suspend fun getDevices(accessToken: String): List<Device>? {
return client.get {
url(path = "/devices")
header("Authorization", "Bearer $accessToken")
}
}
然而,当后端 returns null 我得到一个异常:
W/System.err: java.lang.NullPointerException
W/System.err: at io.ktor.client.features.json.serializer.KotlinxSerializer.read(KotlinxSerializer.kt:37)
最好的方法是什么?我认为最简单的方法是将后端调整为return []而不是null,但是可以在客户端解决吗?或者后端应该 return [] 而不是 null?
问题是 Ktor 中的任何 JsonSerializer
只能将 JSON 文本反序列化为不可为 null 的对象,因为 read
方法签名:
fun read(type: TypeInfo, body: Input): Any
抛出 NullPointerException
是因为在该方法的末尾使用 !! 运算符将值转换为非空类型。
作为解决方法,您可以捕获 NullPointerException
和 return null
值。此行为将在 Ktor 2.0.0 中修复。
我正在使用 Ktor 获取这样的列表,在某些情况下 returns null。
override suspend fun getDevices(accessToken: String): List<Device>? {
return client.get {
url(path = "/devices")
header("Authorization", "Bearer $accessToken")
}
}
然而,当后端 returns null 我得到一个异常:
W/System.err: java.lang.NullPointerException
W/System.err: at io.ktor.client.features.json.serializer.KotlinxSerializer.read(KotlinxSerializer.kt:37)
最好的方法是什么?我认为最简单的方法是将后端调整为return []而不是null,但是可以在客户端解决吗?或者后端应该 return [] 而不是 null?
问题是 Ktor 中的任何 JsonSerializer
只能将 JSON 文本反序列化为不可为 null 的对象,因为 read
方法签名:
fun read(type: TypeInfo, body: Input): Any
抛出 NullPointerException
是因为在该方法的末尾使用 !! 运算符将值转换为非空类型。
作为解决方法,您可以捕获 NullPointerException
和 return null
值。此行为将在 Ktor 2.0.0 中修复。