SpringBoot 3.1.4迁移后WebClient调用Jackson解析报错
项目从SpringBoot 2.7迁移至3.1.4(使用Java 17、Jackson 2.15.0)后,原正常运行的WebClient调用出现Jackson解析响应报错。
项目依赖配置
<properties> <java.version>17</java.version> <kotlin.version>1.7.21</kotlin.version> <springdoc.openapi.version>2.2.0</springdoc.openapi.version> <swagger-annotations.version>2.2.0</swagger-annotations.version> <spring-cloud.version>2022.0.4</spring-cloud.version> <apache.poi.version>5.2.3</apache.poi.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-kotlin</artifactId> </dependency> <dependency> <groupId>io.projectreactor.kotlin</groupId> <artifactId>reactor-kotlin-extensions</artifactId> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jdk8</artifactId> </dependency> <dependency> <groupId>org.jetbrains.kotlinx</groupId> <artifactId>kotlinx-coroutines-reactor</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.9</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> <version>3.1.9</version> </dependency> <dependency> <groupId>jakarta.annotation</groupId> <artifactId>jakarta.annotation-api</artifactId> <version>2.1.1</version> </dependency> </dependencies>
报错信息
java.lang.NoSuchMethodError: 'com.fasterxml.jackson.core.JsonParser com.fasterxml.jackson.core.JsonFactory.createNonBlockingByteBufferParser()' at org.springframework.http.codec.json.Jackson2Tokenizer.tokenize(Jackson2Tokenizer.java:251)
解决方案
核心原因
该错误是Jackson版本依赖冲突导致的。SpringBoot 3.1.x默认适配Jackson 2.15.x,但项目中可能引入了更低版本的jackson-core组件——createNonBlockingByteBufferParser()方法是Jackson 2.10+才新增的,低版本Jackson不存在这个方法,因此触发NoSuchMethodError。
排查与修复步骤
检查依赖树
执行Maven命令查看依赖树,定位引入低版本Jackson的来源:mvn dependency:tree重点排查
spring-cloud-starter-sleuth这类第三方依赖,确认是否自带了低版本Jackson组件。统一Jackson版本
利用SpringBoot的依赖管理能力,在pom.xml的<properties>中明确指定Jackson版本(与SpringBoot 3.1.4默认版本一致即可):<properties> <!-- 其他配置... --> <jackson.version>2.15.2</jackson.version> </properties>排除冲突依赖
如果发现某个依赖强制引入了低版本Jackson,在该依赖中添加排除规则,移除冲突的Jackson组件。以spring-cloud-starter-sleuth为例:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> <version>3.1.9</version> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> </exclusions> </dependency>验证修复
重新执行mvn dependency:tree,确认所有Jackson相关依赖(jackson-core、jackson-databind、jackson-module-kotlin等)版本统一为2.15.x,随后重启项目测试WebClient调用即可。
内容的提问来源于stack exchange,提问作者kartik Chauhan

