【Kotlin】moshiで@Jsonがうまく動かないときの対処

moshiでjsonをdata classに変換するときに、jsonのキーとdata classのプロパティ名が異なる場合に@Jsonというアノテーションをつけると思います。


data class Hoge(
@Json(name = "item_id") val itemId: Int,
)

しかし、アノテーションをしたプロパティだけ値がうまく入ってくれなくて、

Intなら0に、Stringならnullにというような感じになっていました。

調べたところ、Kotlinの場合は次のようにする必要があるみたいです。

gradleにmoshi-kotlinを追加


implementation("com.squareup.moshi:moshi-kotlin:1.8.0")

KotlinJsonAdapterFactoryを使う


// import com.squareup.moshi.KotlinJsonAdapterFactory ←こっちはdeprecated
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory

val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()

Retrofitでmoshiを使うときもこんな感じで。


val retrofit = Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(
MoshiConverterFactory.create(
Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
)
)
.build()

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です