Адаптер Moshi для аннотированной модели
В настоящее время я использую адаптер 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.
Любая идея, что я должен сделать, чтобы это работало?
Заранее спасибо,
1 ответ
Для работы с Kotlin Моши требуется либо отражающий KotlinJsonAdapterFactory (из артефакта moshi-kotlin), либо адаптеры code-gen (из артефакта moshi-kotlin-codegen). https://github.com/square/moshi
В будущем выпуске Moshi будет выдана соответствующая ошибка, чтобы заявить об этом требовании.
С артефактом 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
)