Moshi десериализует значения как null

Я недавно перешел с 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. Что я делаю неправильно?

4
0
2 095
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По какой-то причине, когда я явно указываю классу 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 по умолчанию их не видит.)

Eric Cochran 05.11.2018 20:38

Другие вопросы по теме