#android #kotlin #moshi
Вопрос:
У меня есть следующее свойство в моем классе данных
@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
Однако, если ответ содержит это значение, то он всегда будет исключен
Если я сделаю свойство обнуляемым, как это, то ошибка появится снова:
@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"
Ответ №1:
Игнорируйте свойство в moshi, если его значение отсутствует
В общем, я просто использую val propertyName: Type?
, это прекрасно работает в моем проекте.
@Json(name = "email") val email: String,
@Json(name = "userName") val userName: String?,
@Json(name = "isSignup") val isSignup: Boolean?,
...
Что касается вашего описания, почему бы не использовать Boolean?
, потому что я проверил ошибку :
Ожидалось значение int, но оно было логическим по пути $.products[0].рекомендуется по адресу $.products[0].рекомендуется
Если я правильно понимаю, это означает, что типы не соответствуют друг другу. Сервер возвращается Boolean
, но вы используете Int
его в классе данных.
Как насчет этого?
@Json(name = "recommended") val recommended: Boolean?