Skip to main content
Spring Boot 4.x 将随 Spring Framework 7.x 一起发布,其中最重要的变更之一就是从 Jackson 2.x 升级到 Jackson 3.x。这次升级带来了许多破坏性变更,需要开发者特别注意。 最近在群里讨论 Spring Boot 4.x 的变更,大家的反应基本都是:“这改动真是一坨大的!” 作为一个在 Spring 生态摸爬滚打多年的开发者,看到这次 Jackson 3.0 的变更真的是五味杂陈: 不过说实话,这些改进对于大部分业务场景来说,远不如迁移成本来得实在。

主要破坏性变更

1. 包名和 GroupId 变更

最重大的变更是包名的完全重构: 旧的 Jackson 2.x:
新的 Jackson 3.x:
注意: jackson-annotations 仍然保持在 com.fasterxml.jackson 包下不变。

2. ObjectMapper 构建方式变更

Jackson 2.x 方式:
Jackson 3.x 强制使用 Builder 模式:
重要变更: ObjectMapper 和 JsonFactory 在 Jackson 3.x 中变为不可变对象,必须使用 Builder 模式创建。

3. 异常处理变更

Jackson 2.x:
Jackson 3.x:

4. API 方法签名变更

方法重命名和移除:

5. 类型处理变更

泛型和类型引用: Jackson 2.x:
Jackson 3.x:

Spring Boot 4.x 集成影响

1. 自动配置变更

Spring Boot 4.x 的 Jackson 自动配置将适配新的 API:

2. Spring MVC 集成

Controller 中的使用保持基本不变:

3. 配置属性调整

application.yml 中的 Jackson 配置需要验证兼容性:

迁移策略

1. 逐步迁移计划

阶段 1:依赖更新
阶段 2:包名替换
阶段 3:代码重构
  • 将所有 ObjectMapper 创建改为 Builder 模式
  • 移除不必要的异常捕获
  • 更新特性配置代码

2. 自动化迁移工具

使用 OpenRewrite 进行自动迁移:
运行迁移:

总结

Jackson 3.0 在 Spring Boot 4.x 中的升级是一次重大变更,主要影响包括:
  1. 包名从 com.fasterxml.jackson 变更为 tools.jackson
  2. 强制使用 Builder 模式创建 ObjectMapper
  3. 异常处理从受检异常变为运行时异常

参考资料