如果值不存在,则忽略 moshi 中的 属性

Ignore a property in moshi if the value is not present

我的数据中有以下 属性 class

@Parcelize
@JsonClass(generateAdapter = true)
data class CatalogProduct(
    @Json(name = "recommended")
    val recommended: Int = 0
) : Parcelable

我收到以下错误:

Expected an int but was BOOLEAN at path $.products[0].recommended at $.products[0].recommended

由于我从 API 返回的响应可能不包含该值作为其可选值。

如果值不存在,下面不会显示错误。

@Transient
@Json(name = "recommended")
val recommended: Int = 0

但是,如果响应包含该值,那么它将始终被排除

如果我像这样使 属性 可以为 null,那么错误将再次显示:

@Json(name = "recommended")
val recommended: Int? = 0

我如何推荐才能在响应中没有值时被忽略,而在有值时不被忽略?

我正在使用以下依赖项和版本

moshiVersion = '1.11.0'

implementation "com.squareup.moshi:moshi:$moshiVersion"
implementation 'com.serjltt.moshi:moshi-lazy-adapters:2.2'
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshiVersion"
implementation "com.squareup.retrofit2:converter-moshi:$retrofitVersion"

Ignore a property in moshi if the value is not present

一般来说,我只用val propertyName: Type?,在我的项目中效果很好。

@Json(name = "email") val email: String,
@Json(name = "userName") val userName: String?,
@Json(name = "isSignup") val isSignup: Boolean?,
...

关于你的描述,为什么不使用Boolean?,因为我检查了错误:

Expected an int but was BOOLEAN at path $.products[0].recommended at $.products[0].recommended

如果我没理解错的话,就是类型不匹配。服务器 return Boolean 但是你在数据中使用 Int class.

这个怎么样?

@Json(name = "recommended") val recommended: Boolean?