3️⃣

Jackson 3の主要な変更点と対策

に公開

Spring Boot 4へのアップグレード(11月20日予定)に合わせてなのか、Jacksonが2から3にアップグレードされました。

変更点がけっこう色々あるので、主要なものだけまとめておきます。

全ての変更点については、公式のマイグレーションガイド👇️を確認してください。

https://github.com/FasterXML/jackson/blob/main/jackson3/MIGRATING_TO_JACKSON_3.md

環境

  • jackson-databind 3.0.1
  • jackson-annotations 2.20
  • Spring Boot 4.0.0-RC1

変更点1. パッケージ名の変更

Jacksonのパッケージ名が com.fasterxml.jackson.* から tools.jackson.* に変更されました。MavenでのグループIDも同様に com.fasterxml.jackson.* から tools.jackson.* に変更されています。

ただし @JsonProperty などが含まれるライブラリjackson-annotationsのみ、 パッケージ名が com.fasterxml.jackson.* のまま (グループIDも com.fasterxml.jackson.* のまま)です(経緯はこちら)。2025年10月29日現在の最新バージョンは 2.22 です。おそらく、今後もしばらく jackson-annotations のみバージョンは 2.x のままになると思います。

jackson-databindなどがjackson-annotationsに依存しています。👇️のように前者は tools.jackson.* でバージョンが 3.x 、後者は com.fasterxml.jackson.* でバージョンが 2.x なので違和感がありますが、これで正しいです。

変更点2. Java 8関連モジュールがビルトイン+削除

以下のモジュールが削除され、同等の機能がデフォルトで設定済みになりました。

  • jackson-module-parameter-names
  • jackson-datatype-jdk8
  • jackson-datatype-jsr310

Spring Boot無しでJacksonを使うときに嬉しいですね。

変更点3. 例外が非チェック例外になった

Jackson 2では、親例外の JsonProcessingExceptionIOException のサブクラスであったため、全例外がチェック例外でした。

Jackson 3では親例外の JacksonExceptionRuntimeException のサブクラスなので、全例外が非チェック例外になりました。

アップグレードの手順

手元の小さなSpring Boot WebアプリをSpring Boot 3(Jackson 2を利用)からSpring Boot 4.0.0-RC1(Jackson 3を利用)にアップグレードしたところ、アプリケーションもテストコードも変更は必要ありませんでした。

しかし、マイグレーションガイドにこれだけの変更点があるので、思わぬ非互換性や、生成されるJSONの微妙な違いがあるかもしれません。

なので

  1. Spring Boot 3.5までアップグレードする
  2. JSON APIの部分については、JUnitでしっかりテストを書いておく
  3. Spring Boot 4.0にアップグレードする

という手順で進めるのが理想的かなと思います。こうしておくと、JSONが微妙に変わっていたらテストで検出できますね。

Discussion