retrofit 默认支持“字段忽略”——只需在数据类中声明所需字段,gson 会自动跳过 json 中未定义的字段,无需额外配置。本文详解正确实现方式、常见报错原因及最佳实践。
在使用 Retrofit 进行 @GET 请求时,若后端返回的 JSON 包含大量字段(如 resourceUri、phone、email 等),而你仅需其中少数几个(例如仅 id),完全不需要定义全部字段。Retrofit + Gson 的默认行为正是「宽松反序列化」:只要目标数据类中声明了对应字段(类型兼容),其余未知字段会被自动忽略,不会抛出异常。
✅ 正确做法如下:
精简定义数据类(仅含所需字段):
data class ApiResponse( val id: String )
即使响应中包含 "xxx": null、"phone": "kkk" 等未声明字段,Gson 也会静默跳过,不会报错。
确保 Retrofit 配置了 GsonConverterFactory(关键!):
val retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create()) // 必须添加!
.build()⚠️ 若遗漏此行,或使用了其他不兼容的 Converter(如 Moshi、Jackson 但未正确配置),将导致解析失败。
接口方法保持简洁:
interface ApiService { @GET("user/profile") suspend fun apiCall(@Header("Authorization") authorization: String): Response }
? 常见报错原因排查:
data class ApiResponse(
@SerializedName("id") val id: String
)? 进阶建议:
val gson = GsonBuilder()
.setLenient() // 允许 JSON 格式松散(如末尾逗号)
.create()
Retrofit.Builder().addConverterFactory(GsonConverterFactory.create(gson))总结:你的原始实现逻辑完全正确。问题大概率出在 Retrofit 初始化缺失 Gson Converter、网络响应非预期格式,或混淆了 Response 与 ApiResponse 的使用方式。请优先检查日志中的具体异常栈信息,再对照上述要点逐一验证。