如何在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
相关产品推荐
相关产品推荐

