Spring MVC引入jackson后报InvalidDefinitionException类找不到异常如何解决
异常原因及解决方案
核心根因
java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException由依赖版本不兼容/不匹配导致:
InvalidDefinitionException是Jackson 2.9.0及以上版本才新增的异常类,当引入的Jackson版本过低、Spring MVC与Jackson版本不兼容、Jackson多个子包版本不一致时,都会触发类找不到的异常。
具体解决步骤
- 确认Spring MVC版本对应的Jackson兼容范围:
- Spring 5.x及以上:要求Jackson 2.9+,推荐使用2.10.x、2.13.x等稳定版本
- Spring 4.3.x:最高支持Jackson 2.9.x,禁止使用2.10及以上版本
- Spring 4.2.x及更低:建议使用Jackson 2.8.x版本
- 统一Jackson核心依赖版本
必须保证jackson-core、jackson-databind、jackson-annotations三个核心包的版本完全一致,禁止跨版本混用。
如果使用Maven管理依赖,参考配置如下(版本根据Spring版本调整):
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.10</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.10</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.10</version> </dependency>
如果是手动导入jar包的动态Web项目,需要同时导入上述三个同版本的jar包,不能仅导入jackson-core和jackson-databind。
- 排查依赖冲突
如果项目中存在其他第三方依赖内置了不同版本的Jackson包,需要统一排除冲突/低版本的Jackson依赖,避免版本覆盖。
验证操作
调整依赖后,清理项目编译缓存(Maven执行mvn clean install,IDE执行Rebuild Project)后重新启动即可解决DispatcherServlet初始化异常。
内容的提问来源于stack exchange,提问作者A_Name
相关产品推荐
相关产品推荐

