贝利信息

如何在 Retrofit @GET 请求中忽略 API 响应中的多余字段

日期:2026-01-07 00:00 / 作者:碧海醫心

retrofit 默认支持“字段忽略”——只需在数据类中声明所需字段,gson 会自动跳过 json 中未定义的字段,无需额外配置。本文详解正确实现方式、常见报错原因及最佳实践。

在使用 Retrofit 进行 @GET 请求时,若后端返回的 JSON 包含大量字段(如 resourceUri、phone、email 等),而你仅需其中少数几个(例如仅 id),完全不需要定义全部字段。Retrofit + Gson 的默认行为正是「宽松反序列化」:只要目标数据类中声明了对应字段(类型兼容),其余未知字段会被自动忽略,不会抛出异常。

✅ 正确做法如下:

  1. 精简定义数据类(仅含所需字段):

    data class ApiResponse(
     val id: String
    )

    即使响应中包含 "xxx": null、"phone": "kkk" 等未声明字段,Gson 也会静默跳过,不会报错。

  2. 确保 Retrofit 配置了 GsonConverterFactory(关键!):

    val retrofit = Retrofit.Builder()
     .baseUrl("https://api.example.com/")
     .addConverterFactory(GsonConverterFactory.create()) // 必须添加!
     .build()

    ⚠️ 若遗漏此行,或使用了其他不兼容的 Converter(如 Moshi、Jackson 但未正确配置),将导致解析失败。

  3. 接口方法保持简洁

    interface ApiService {
     @GET("user/profile")
     suspend fun apiCall(@Header("Authorization") authorization: String): Response
    }

? 常见报错原因排查

? 进阶建议

总结:你的原始实现逻辑完全正确。问题大概率出在 Retrofit 初始化缺失 Gson Converter、网络响应非预期格式,或混淆了 Response 与 ApiResponse 的使用方式。请优先检查日志中的具体异常栈信息,再对照上述要点逐一验证。