You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Retrofit @GET请求仅获取ID字段报错,如何忽略其他响应字段?

问题:仅解析API响应中ID字段时代码报错的解决方法

我发起了一个GET API请求,响应数据如下:

{
    "id": "22222",
    "resourceUri": "ssss",
    "xxx": null,
    "xxx": [],
    "phone": "kkk",
    "email": "jjjjjj",
}

我仅需要其中的ID字段,因此创建了如下数据类:

data class ApiResponse(
    val id: String,
)

API调用代码如下:

suspend fun apiCall(@Header("Authorization") authorization : String) :Response<ApiResponse>

但这段代码无法正常运行并抛出错误,请问该如何解决?


常见原因及解决办法

1. 序列化器默认要求匹配所有字段

多数Kotlin序列化库(如Kotlinx Serialization、Moshi、Gson)默认会校验响应中的所有字段是否都能被数据类映射,未声明的字段会触发解析错误。

对应解决方式:

  • Kotlinx Serialization:给数据类添加@Serializable和@JsonIgnoreUnknownKeys注解,同时在序列化器配置中开启忽略未知字段:
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonIgnoreUnknownKeys

@Serializable
@JsonIgnoreUnknownKeys
data class ApiResponse(
    val id: String,
)

// Retrofit配置示例
val json = Json { ignoreUnknownKeys = true }
Retrofit.Builder()
    .addConverterFactory(KotlinxSerializationConverterFactory(json))
    // 其他配置(baseUrl等)
  • Moshi:给数据类加@JsonClass(generateAdapter = true),并在构建Moshi实例时添加宽松解析拦截器:
import com.squareup.moshi.JsonClass
import com.squareup.moshi.Lenient

@JsonClass(generateAdapter = true)
data class ApiResponse(
    val id: String,
)

// Retrofit配置示例
val moshi = Moshi.Builder()
    .add(Lenient())
    .build()
Retrofit.Builder()
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    // 其他配置
  • Gson:Gson默认忽略未知字段,但如果开启了严格模式会报错,确保使用默认Gson实例即可:
Retrofit.Builder()
    .addConverterFactory(GsonConverterFactory.create())
    // 其他配置

2. 响应JSON存在格式问题

你的响应里有两个同名的xxx字段,且最后一个字段末尾多了逗号,这不符合JSON规范,严格的序列化器会解析失败。

  • 优先要求后端修复响应格式,移除重复字段和末尾逗号;
  • 临时方案:使用支持宽松解析的序列化配置(如Kotlinx Serialization开启isLenient = true,Moshi添加Lenient()拦截器)。

内容的提问来源于stack exchange,提问作者sina .s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:05:21