使用Retrofit+Kotlin拉取API数据,Insomnia正常但请求失败如何解决?
问题原因
报错为Gson解析时类型不匹配导致的,日志中Invalid double: "6069dea870f35f0f90242f4a"的字符串是接口返回的_id字段值,你在Product数据类中将_id的类型定义为Int,但接口返回的_id是字符串类型的MongoDB ObjectId,Gson尝试把字符串转为数字时抛出异常。
修正方案
将Product数据类里的_id字段类型从Int修改为String即可:
data class Product ( @SerializedName("_id") var _id: String, // 此处将Int改为String @SerializedName("name") var name: String, @SerializedName("price") var price: Number, @SerializedName("productImage") var productImage: String )
可选优化点
- 数据类字段优先用
val而非var,接口返回的数据一般不需要二次修改,不可变类型更安全 - 未用到的JSON字段不需要在数据类中声明,Gson会自动忽略
- 可以给ApiService的方法加上
suspend关键字,用协程调用替代Callback回调,代码更简洁易维护
内容的提问来源于stack exchange,提问作者therealwalim
相关产品推荐
相关产品推荐

