运行Shopizer默认实现失败,遭遇Jackson方法不存在错误
错误详情
Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location:
com.fasterxml.jackson.databind.DeserializationContext.<init>(DeserializationContext.java:211)The following method did not exist:
com.fasterxml.jackson.core.JsonParser.getReadCapabilities()Lcom/fasterxml/jackson/core/util/JacksonFeatureSet;The method's class, com.fasterxml.jackson.core.JsonParser, is available from the following locations:
jar:file:/C:/Users/waseem.zawaideh/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2.jar!/com/fasterxml/jackson/core/JsonParser.classThe class hierarchy was loaded from the following locations:
com.fasterxml.jackson.core.JsonParser: file:/C:/Users/waseem.zawaideh/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.10.2/jackson-core-2.10.2.jarAction:
Correct the classpath of your application so that it contains a single, compatible version of com.fasterxml.jackson.core.JsonParser
已尝试统一依赖版本但问题未解决。
核心原因
这个错误是因为Jackson databind模块版本远高于core模块版本:getReadCapabilities()方法是Jackson 2.12及以上版本才在jackson-core中新增的,而当前项目加载的是2.10.2版本的core,导致databind调用了不存在的方法。
解决方案
1. 彻底排查依赖树
在项目根目录执行Maven命令,列出所有Jackson相关依赖的来源和版本:
mvn dependency:tree -Dincludes=com.fasterxml.jackson.core
找出哪些依赖引入了低版本的jackson-core,以及databind的实际版本。
2. 强制统一所有Jackson核心模块版本
在项目的pom.xml中添加dependencyManagement节点,强制指定Jackson所有核心模块的统一版本(建议使用Shopizer官方推荐的版本,或选择2.12+的稳定版本,比如2.15.2):
<dependencyManagement> <dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.15.2</version> </dependency> </dependencies> </dependencyManagement>
这样能确保所有依赖都使用指定版本的Jackson,避免冲突。
3. 清理Maven本地仓库的冲突jar
删除本地仓库中对应版本的Jackson核心jar,避免旧版本残留:
- 路径:
C:\Users\waseem.zawaideh\.m2\repository\com\fasterxml\jackson\core - 删除
jackson-core、jackson-databind、jackson-annotations下的所有版本文件夹,然后重新执行mvn clean install拉取最新指定版本。
4. 验证类路径
重新运行项目前,检查IDE的类路径(比如IntelliJ的Project Structure -> Libraries),确认只有指定版本的Jackson核心jar存在,没有其他版本的jar混入。
内容的提问来源于stack exchange,提问作者Wes74

