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

如何在Retrofit请求体中传递Null值字段?已配置serializeNulls()

问题:Retrofit + Gson 序列化时保留Null值字段失败

我定义了如下请求体:

{
   "userName":"xyz",
   "teamAssigned":null
}

该请求体对应Kotlin的可序列化对象xyzApiRequestBody,但传入Retrofit请求体后,teamAssigned键会被自动移除,仅保留非空值的字段。我已在Retrofit的GsonBuilder中添加了serializeNulls(),但问题仍未解决。


解决方法

  • 检查Kotlin数据类配置
    确认xyzApiRequestBody数据类的字段没有被标记为transient,也没有使用会干扰空值序列化的自定义注解(如@JsonIgnore)。

  • 确保Gson配置正确生效
    必须确保带serializeNulls()配置的Gson实例被Retrofit正确引用,不要使用默认的GsonConverterFactory。示例代码:

    val gson = GsonBuilder()
        .serializeNulls()
        .create()
    
    val retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build()
    
  • 排查自定义序列化器
    如果为该请求体或字段设置了自定义TypeAdapter,要确保适配器逻辑中不会跳过空值字段,需明确处理null值的序列化逻辑。

  • 使用@SerializedName注解兜底
    在数据类的对应字段上添加@SerializedName注解,确保字段名称映射正确,同时避免因隐式规则导致空值字段被忽略:

    data class XyzApiRequestBody(
        val userName: String,
        @SerializedName("teamAssigned")
        val teamAssigned: String?
    )
    

内容的提问来源于stack exchange,提问作者Eashubh Thapliyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:41:00