Spring Boot 2.6.9升级Swagger2至OpenAPI3遇Jackson冲突求解
问题根因
抛出java.lang.NoSuchFieldError: MINIMIZE_QUOTES属于典型的依赖版本不兼容问题:
- 当前项目Jackson组件存在版本混用、版本过低问题:
jackson-databind为2.10.2版本,jackson-datatype为2.7.2版本,跨大版本混用本身就存在兼容性风险 - Spring Boot 2.6.9官方内置适配的Jackson版本为2.13.x,适配Spring Boot 2.6+的OpenAPI3实现springdoc-openapi,其依赖的swagger-core v3组件要求Jackson版本不低于2.12。
MINIMIZE_QUOTES是Jackson高版本中YAMLGenerator.Feature枚举类才包含的常量,项目运行时实际加载的低版本Jackson类中不存在该字段,直接触发报错。
修复方案
按优先级操作即可:
方案1:统一使用Spring Boot官方管理的Jackson版本(推荐)
- 移除项目构建配置(pom.xml/gradle配置)中手动为所有Jackson相关依赖声明的版本号,由Spring Boot父依赖的依赖管理机制自动拉取与2.6.9版本完全适配的Jackson组件,从根源避免版本冲突。
- 如果业务必须手动指定Jackson版本,需将所有Jackson相关组件(含
jackson-core、jackson-databind、jackson-annotations、jackson-datatype-jsr310、jackson-dataformat-yaml等)的版本统一升级到2.13.5(即Spring Boot 2.6.9内置的Jackson正式版本),严禁出现不同Jackson组件版本号不一致的情况。
方案2:匹配正确的springdoc-openapi版本
- Spring Boot 2.6.x对应的适配springdoc-openapi版本为1.6.x分支,禁止引入2.x版本(该分支适配Spring Boot 3,会引入更高版本的Jackson依赖加剧冲突)。
- 引入springdoc依赖时不要手动指定其关联的swagger-core等组件版本,避免版本错位。
方案3:排查并排除冲突的低版本依赖
- 执行Maven依赖树排查命令,定位是否有其他第三方依赖引入了低版本Jackson并被项目优先加载:
mvn dependency:tree -Dincludes=com.fasterxml.jackson.core
- 找到引入低版本Jackson的依赖项后,添加exclusion配置将其排除,保证项目全局使用统一的兼容版本Jackson即可。
验证方式
- 调整依赖后执行
mvn clean compile清空旧编译缓存,重新启动项目即可解决该报错,OpenAPI3接口文档可正常加载访问。
内容的提问来源于stack exchange,提问作者Shantanu Kawale
相关产品推荐
相关产品推荐

