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

Moshi配合Retrofit发送请求时null字段未序列化导致请求体为空

Moshi 默认序列化规则为自动跳过值为 null 的字段,因此当 PointBody 的两个属性都为 null 时,最终序列化结果就是空对象 {}。

解决方案

你可以根据业务需要选择以下任意一种方案:

方案1:全局开启null值序列化(推荐)

修改Moshi初始化代码,调用serializeNulls()方法开启全局序列化null字段的规则,修改后的代码如下:

private fun provideMoshi(): Moshi {
    return Moshi
        .Builder()
        .add(KotlinJsonAdapterFactory())
        .serializeNulls() // 新增该行配置
        .build()
}

该方案生效后,项目中所有类的null值字段都会被正常序列化到JSON中,适配你当前的上报需求。

方案2:仅为指定字段开启null值序列化

如果你不需要全局生效,只想针对PointBody类的字段做特殊处理,可以直接在字段的@Json注解中添加serializeNulls = true配置:

@Serializable
data class PointBody(
    @Json(name = "latitude", serializeNulls = true) val latitude: Double?,
    @Json(name = "longitude", serializeNulls = true) val longitude: Double?
)

该配置仅对当前加了注解的字段生效,不影响其他类的序列化规则。

修改完成后重新运行项目,当两个定位字段都为null时,请求体就会输出你期望的{"latitude":null,"longitude":null}格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:06:01