Retrofit @GET请求返回变量为null但NewsAPI后台显示请求成功如何解决
问题根因及修复方案
- 核心问题是你的自定义响应类字段和News API的实际返回结构不匹配:News API
/v2/everything接口返回的文章列表字段名为articles,你写的results字段在返回结果中不存在,序列化工具找不到对应字段自然会赋值为null。 - 其他可能导致全null的常见原因:未配置正确的Retrofit响应转换器、实体类未添加正确的序列化注解、混淆规则未豁免实体类。
具体修复步骤
- 修正
NewsResponse字段映射
你可以直接修改字段名和API返回一致,也可以通过序列化注解做字段映射:
// 方案1:直接对齐API字段名(推荐,代码更简洁) data class NewsResponse ( val articles: List<NewsArticle> ) // 方案2:保留原有字段名,加SerializedName注解(Gson场景) import com.google.gson.annotations.SerializedName data class NewsResponse ( @SerializedName("articles") val results: List<NewsArticle> )
- 检查
NewsArticle类的所有字段也要和API返回的文章结构字段一一对应,名称不一致的同样要加序列化注解映射。 - 确认Retrofit初始化时添加了对应响应转换器,示例(Gson场景):
val retrofit = Retrofit.Builder() .baseUrl(NewsApi.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) // 不能缺少这行 .build()
- 若项目开启了混淆,需要将所有网络请求实体类加入混淆豁免规则,避免混淆后字段名被篡改导致解析失败。
内容的提问来源于stack exchange,提问作者Samwise
相关产品推荐
相关产品推荐

