android - 当 GET 返回 null 而不是 List 时,KotlinxSerializer 出现 NullPointerException
问题描述
使用 Ktor 我正在获取这样的列表,在某些情况下返回 null。
override suspend fun getDevices(accessToken: String): List<Device>? {
return client.get {
url(path = "/devices")
header("Authorization", "Bearer $accessToken")
}
}
但是,当后端返回 null 时,我得到一个异常:
W/System.err: java.lang.NullPointerException
W/System.err: at io.ktor.client.features.json.serializer.KotlinxSerializer.read(KotlinxSerializer.kt:37)
这里最好的方法是什么?我认为最简单的方法是将后端调整为返回 [] 而不是 null,但是可以在客户端解决吗?还是普遍认为后端应该返回 [] 而不是 null?
解决方案
问题是由于方法签名JsonSerializer
,Ktor 中的 any 只能将 JSON 文本反序列化为不可为空的对象:read
fun read(type: TypeInfo, body: Input): Any
被NullPointerException
抛出是因为在该方法结束时!! 运算符用于将值转换为非空类型。
作为一种解决方法,您可以捕获NullPointerException
并返回null
值。此行为将在 Ktor 2.0.0 中修复。
推荐阅读
- c++ - if vs 处理不同场景时的函数调用性能
- php - 如何使用两个条件进行 Laravel 验证?
- javascript - SheetJS js-xlsx - 在单元格范围内添加超链接公式
- c++ - How do I concatenate strings with chars in C++?
- angular - Ionic 4 wordpress 身份验证
- java - 如何不序列化 Spring Boot @RestController 中的 @Id 字段?
- postgresql - Truncate all tables in Postgres with a suffix
- python - UpperCase 的问题,str 对象没有属性“isUpperCase”
- xamarin.android - 如何创建pdf文件
- python - Pygame 软件 blitting vs PyOpenGL 硬件绘图