【解決済】Jackson+Kotlinでisで始まる名前のBoolean型プロパティが正しくシリアライズされない

プログラミング
この記事は約3分で読めます。

タイトルの件、ヘタレすぎてハマりまくったので書き溜めておきます。

一応中身も軽く書きましたが、もはや目次だけ読めば解決するレベルです。。

問題

概要

Spring BootでJSONを扱うときにもお世話になるJSONライブラリのJackson

Kotlinで使用する際に、Boolean型のプロパティの名前がisで始まると、シリアライズした際にプロパティ名からisが除去されてしまうんじゃ。

@JsonPropertyで名前指定してもダメ

例えば、下記クラスをJSON文字列に変換すると、

下記のようにプロパティ名からisが取れてcrazyになってしまうんじゃ。。

{
  "crazy": true
}

@JsonPropertyで名前を指定していてもダメだなんて困るわ。。

APIの戻りとかでisHogefugaとか普通に使いたいし困るわ。。

解決方法

JacksonをKotlinで使うとき、jackson-module-kotlinを使うと思うが、ドンピシャなIssueが下記の通り挙がっておったわ。。

Boolean property name starting with 'is' not serialized/deserialized properly · Issue #80 · FasterXML/jackson-module-kotlin
Hi, I'm experiencing issues with a boolean property which name starts with 'is'. While the getter doesn't get prefixed by kotlin, it seems that ...

既にマージされてるわね。

助かるわ。

jackson-module-kotlinのバージョンを2.10.1に上げる

それだけじゃ。

Gradleなら

implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.10.1")

Mavenなら

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-kotlin</artifactId>
    <version>2.10.1</version>
</dependency>

関連情報

Spring Bootと使用する場合

Spring Bootを使用しているなら依存関係の定義でjackson-module-kotlinのバージョンを省略できるが、Spring Bootの2.2.2.RELEASEならjackson-module-kotlinのバージョンは2.10.1になるようじゃ。

2.2.1.RELEASEだとjackson-module-kotlinのバージョンは2.10.0になるようね。その場合は、明示的にバージョン(2.10.1)を指定する必要があるわね。

コメント

タイトルとURLをコピーしました