Jackson类型不兼容错误:JsonFactory无法转换为TokenStreamFactory
Jackson类型不匹配问题解决
问题背景
- Spring版本:5.2.22
- 使用的Jackson依赖:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.0</version> </dependency>
错误详情
位置:
com/fasterxml/jackson/databind/cfg/MapperBuilder.streamFactory()Lcom/fasterxml/jackson/core/TokenStreamFactory; @7: areturn
原因:
类型'com/fasterxml/jackson/core/JsonFactory'(当前栈帧,stack[0])无法赋值给'com/fasterxml/jackson/core/TokenStreamFactory'(方法签名要求)
当前栈帧:
bci: @7
flags: { }
locals: { 'com/fasterxml/jackson/databind/cfg/MapperBuilder' }
stack: { 'com/fasterxml/jackson/core/JsonFactory' }
字节码:
0x0000000: 2ab4 0002 b600 08b0
问题根源
Jackson 2.11.x版本里,JsonFactory还没实现TokenStreamFactory接口——这个接口是Jackson 2.12及以上版本才新增的。但Spring 5.2.22依赖的Jackson版本范围可能引入了更高版本的Jackson core类,导致类加载时出现矛盾:编译时方法签名要求返回TokenStreamFactory,但运行时实际返回的JsonFactory没实现这个接口,触发字节码验证错误。
解决步骤
- 统一Jackson核心依赖版本:把jackson-core、jackson-databind、jackson-annotations三个依赖的版本统一成Spring 5.2.22兼容的稳定版,比如2.12.7,修改后的依赖如下:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.12.7</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.7</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.12.7</version> </dependency>
- 排查并解决依赖冲突:用Maven的
mvn dependency:tree命令或者Gradle的./gradlew dependencies任务,检查项目里有没有其他依赖引入了不一致版本的Jackson core,找到后排除冲突依赖,强制使用统一版本。
内容的提问来源于stack exchange,提问作者Rajan
相关产品推荐
相关产品推荐

