Я недавно перешел с Gson на Moshi, и у меня проблемы с парсингом Json.
{
"access_token": "-LNe2LQ7DQH5Y2zs_W5iUumKuaUE",
"token_type": "bearer",
"device_id": "461f-837e-af5050c92fe9",
"expires_in": 3600,
"scope": "*"
}
А вот и класс модели:
data class AuthToken(
@Json(name = "access_token") val accessToken: String,
@Json(name = "token_type") val tokenType: String,
@Json(name = "device_id") val deviceId: String,
@Json(name = "expires_in") val expiresIn: Int,
@Json(name = "scope") val scope: String
)
Каждый раз, когда я переключаюсь на использование Moshi в моем модифицированном клиенте, я получаю следующую ошибку:
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull
Я сделал поле допускающим значение NULL, однако оно всегда десериализуется как NULL. Я проверил свою реакцию на модернизацию, и это (очевидно) то же самое при использовании Gson или Moshi. Что я делаю неправильно?
По какой-то причине, когда я явно указываю классу AuthToken сгенерировать адаптер, я не получаю нулевых значений.
@JsonClass(generateAdapter = true)
data class AuthToken(
@Json(name = "access_token") val accessToken: String,
@Json(name = "token_type") val tokenType: String,
@Json(name = "device_id") val deviceId: String,
@Json(name = "expires_in") val expiresIn: Int,
@Json(name = "scope") val scope: String
)
Если вы не используете поддержку Kotlin от Moshi (отражающие адаптеры KotlinJsonAdapterFactory или кодогенератора), имена
@Jsonне читаются правильно. (Они не добавляются в поле, и отражающий адаптер Java по умолчанию их не видит.)