使用spring 5.3.7启动报错java.lang.NoSuchFieldError: USE_DEFAULTS如何解决
问题根因
该错误属于Jackson多版本冲突导致的类加载异常。Spring 5.3.7默认适配的Jackson版本为2.12.x系列,你虽然单独引入了2.10.3版本的jackson-annotations,但大概率存在其他Jackson核心模块(jackson-core、jackson-databind)版本不一致,或是更低版本的Jackson包被第三方依赖传递引入,类加载器优先加载了不含USE_DEFAULTS枚举的低版本JsonInclude$Include类。
解决步骤
- 第一步:排查全量Jackson依赖版本
执行对应构建工具的依赖树命令,检查所有com.fasterxml.jackson.core组下的依赖版本是否统一,是否存在多版本共存:- Maven项目执行:
mvn dependency:tree | grep jackson - Gradle项目执行:
gradle dependencies | grep jackson
- Maven项目执行:
- 第二步:全局锁定Jackson版本
推荐优先使用Spring 5.3.7适配的2.12.x版本Jackson,通过依赖管理全局锁定所有Jackson模块版本,避免单模块单独引入导致的不一致:
Maven配置示例:
Gradle配置示例:<dependencyManagement> <dependencies> <!-- 统一管理所有Jackson依赖版本 --> <dependency> <groupId>com.fasterxml.jackson</groupId> <artifactId>jackson-bom</artifactId> <version>2.12.3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
如果你必须使用2.10.3版本Jackson,将上述配置中的版本号替换为2.10.3即可,需保证所有Jackson模块版本完全一致。configurations.all { resolutionStrategy { // 强制统一Jackson核心包版本 force 'com.fasterxml.jackson.core:jackson-core:2.12.3' force 'com.fasterxml.jackson.core:jackson-annotations:2.12.3' force 'com.fasterxml.jackson.core:jackson-databind:2.12.3' } } - 第三步:清理缓存重新构建
执行构建清理命令排除旧包缓存干扰:- Maven执行:
mvn clean install - Gradle执行:
gradle clean build
- Maven执行:
常见冲突场景排查
如果调整依赖后问题仍然存在,优先排查项目中引入的第三方框架(如RPC框架、ORM框架、云服务SDK等)的传递依赖,这类组件通常会自带低版本Jackson,需手动排除其传递引入的Jackson相关包。
内容的提问来源于stack exchange,提问作者eleazar salas cravioto
相关产品推荐
相关产品推荐

