LoginSignup
1
1

More than 1 year has passed since last update.

【Kotlin】Jacksonでdata classへデシリアライズの際にInvalidDefinitionExceptionが発生した時の対応

Posted at

概要

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のアノテーションを付与する方法。ただ、これだと一つ一つアノテーション付与するのがちょっと面倒な感じがします。
二つ目はこちらのソースにある通り、ObjectMapperKotlinModuleを登録する方法。このKotlinModuleはjackson-module-kotlinというライブラリをインポートすることで、使用できます。ObjectMapperの作成時にregisterKotlinModule()を呼び出せば良いだけなので、実装としては二つ目の方法が楽なのではないかなと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1