Адаптер Moshi для аннотированной модели - PullRequest
0 голосов
/ 04 февраля 2019

В настоящее время я использую адаптер Moshi для преобразования некоторого json raw в заданный тип.Он работает нормально, пока я не использую аннотированную модель.

Я предполагаю, что должен добавить еще один параметр в мой адаптер, кроме Player::class.java, но я не знаю, что.

Вот пример:

data class Player(
    val username: String,
    @Json(name = "lucky number")
    val luckyNumber: Int
)

private val playerStubRaw = "{\n" +
    "  \"username\": \"jesse\",\n" +
    "  \"lucky number\": 32\n" +
    "}"

@Test
fun doSomething() {
    val moshi = Moshi.Builder().build()
    val player = moshi.adapter(Player::class.java).fromJson(playerStubRaw)
    // player.luckyNumber == 0
}

luckyNumber значение равно 0, а не 32.

Любая идея, что я должен сделать, чтобы это работало?

Заранее спасибо,

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

С артефактом moshi-kotlin-codegen вам также необходимо добавить @JsonClass (generateAdapter = true) в класс для правильной работы декодирования и не устанавливать для свойства значение по умолчанию 0

Так что последобавив плагин kotlin-kapt и зависимость kapt "com.squareup.moshi:moshi-kotlin-codegen:1.8.0" в gradle сборки приложения, аннотируйте класс следующим образом:

@JsonClass(generateAdapter = true)
data class Player(
    val username: String,
    @Json(name = "lucky number")
    val luckyNumber: Int
)
0 голосов
/ 08 февраля 2019

Для работы с Kotlin Моши требуется либо отражающий KotlinJsonAdapterFactory (из артефакта moshi-kotlin), либо адаптеры code-gen (из артефакта moshi-kotlin-codegen).https://github.com/square/moshi#kotlin
In В будущем выпуске Moshi будет выдана соответствующая ошибка для подтверждения этого требования.

...