moshi 1.9.0以上を使う場合に、Cannot serialize Kotlin typeが出たときの対処法

エラー集

 私がmoshi 1.9.0を使おうとすると下記のようなエラーが出てきました。(xxxxxはパッケージ名とクラス)

Cannot serialize Kotlin type xxxxxx. Reflective serialization of Kotlin classes without using kotlin-reflect has undefined and unexpected behavior. Please use KotlinJsonAdapter from the moshi-kotlin artifact or use code gen from the moshi-kotlin-codegen artifact.

 これはmoshi 1.9.0からはkotlin-reflectまたはmoshi-kotlin-codegenを全てのKotlinクラスに利用する必要があるからとのことですので、下記の対処法のどちらかを行いましょう

https://github.com/square/moshi/blob/master/CHANGELOG.md#version-190

KotlinJsonAdapterFactoryを利用する

 Moshiのインスタンスを作成するときに、下記のように.add()を追加して、Kotlin用のアダプターを追加しましょう。

Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

codegenアノテーションプロセッサを利用する

 data classなどに下記のアノテーションを追加しましょう。

@JsonClass(generateAdapter = true)
data class Sample(
        val hoge: Hoge,
        val fuga: Fuga
)

余談

 1.9.0以上の変更については、以前はMoshiはKotlinとjavaを区別していなかったようなのですが、nullをNonNullのフィールドに入れてしまうなどの悪影響が大きかったため、このような修正に至ったようです。

最後まで読んで頂きありがとうございます!

面白かった、参考になった、と少しでも感じて頂けましたら
ブログランキング上位になるための応援をして頂けないでしょうか!
今後も面白い記事を更新していきますので、ぜひ宜しくおねがいします!
エラー集
【TechGrowth】

コメント