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

