概要
Jsonのシリアライズ、デシリアライズを行う際に、JavaだとJacksonのライブラリを使う時があると思います。JacksonはKotlinでも普通に使用できるのですが、Javaのコードをそのままコピーすると、data class
へデシリアライズ時にInvalidDefinitionException
が発生します。
JavaだとこのExceptionが発生したときはJacksonでInvalidDefinitionExceptionが起きたときの対処法にある通りデフォルトコンストラクタを定義すれば回避できますが、data classだとこの方法では回避できないようです。もちろんdata classの使用をやめるということもできるのですが、data classでExceptionを回避するのはどうすれば良いのか、メモ書きとして残しておきます。
対応方法
Parsing with Jackson and Kotlinの記事で、2通りの対応が紹介されています。
一つ目はこちらのソースの通り、デシアライズ対象のdata classのプロパティに@JsonProperty
のアノテーションを付与する方法。ただ、これだと一つ一つアノテーション付与するのがちょっと面倒な感じがします。
二つ目はこちらのソースにある通り、ObjectMapper
にKotlinModule
を登録する方法。このKotlinModuleはjackson-module-kotlinというライブラリをインポートすることで、使用できます。ObjectMapperの作成時にregisterKotlinModule()
を呼び出せば良いだけなので、実装としては二つ目の方法が楽なのではないかなと思います。