Android Kotlin Retrofit对接TheCatApi POST收藏后GET解析报错解决
问题核心原因
你对GET收藏列表接口的返回结构理解错了。这个接口不会直接返回猫咪图片对象的数组,每一条收藏记录都是独立的包装结构,真正的猫咪图片信息是嵌套在每条记录的image字段下的。你之前直接把接口返回值声明为List<CatPhoto>,Moshi解析时会默认数组每个元素的顶层就存在url、id这些图片属性,找不到自然会抛出字段缺失的错误。
你之前写的FavouriteImage类完全不需要删除,它是专门给POST提交收藏时序列化请求体用的,和GET接口的返回解析逻辑互不冲突。
修复步骤
1. 新增收藏记录对应的数据类
定义和接口返回结构匹配的收藏条目类,嵌套复用已有的CatPhoto类:
data class Favourite( @Json(name = "id") val favouriteId: Int, @Json(name = "sub_id") val subId: String, @Json(name = "image") val catPhoto: CatPhoto? // 加?兼容偶发的图片信息缺失场景,避免崩溃 )
原来的CatPhoto类不需要做任何修改,它的字段和嵌套在image下的图片对象结构完全匹配。
2. 修正接口定义
首先修改GET收藏列表的返回值类型,另外你POST接口路径里带的?limit=100是多余的,limit是GET列表接口的查询参数,POST请求不需要带:
// 获取收藏列表接口 @GET("$API_V/favourites") suspend fun getMyFavorites( @Query("sub_id") subId: String, @Query("limit") limit: Int = 100 ): List<Favourite> // 添加收藏接口,移除路径中多余的limit参数 @POST("$API_V/favourites") suspend fun addFavorite( @Body favouriteImage: FavouriteImage )
3. 调整上层调用逻辑
之前你拿到接口返回值可以直接遍历获取CatPhoto对象,现在需要多取一层嵌套:遍历返回的List<Favourite>时,通过条目对象.catPhoto就能拿到你之前用的图片实例,imgSrcUrl、id这些属性的访问方式完全不变,上层UI展示逻辑基本不用改。
报错原因补充
你看到的Required value 'imgSrcUrl' missing at $[.1],意思是解析返回数组的第2个元素(索引从0开始,.1就是第二个)时,在元素顶层找不到和url映射的imgSrcUrl字段——因为真实返回的这个位置的顶层是收藏记录的自有属性,url藏在下层的image对象里,自然解析失败。
内容的提问来源于stack exchange,提问作者madbeans
相关产品推荐
相关产品推荐

