老旧项目集成SpringBoot开发REST接口时内置Tomcat启动失败
问题根因
启动失败的核心原因是Jackson依赖版本不兼容:
你使用的Spring Boot 2.4.0版本默认要求绑定2.11.x系列的Jackson版本,报错中缺失的com/fasterxml/jackson/databind/exc/InvalidDefinitionException类是Jackson 2.9版本之后才新增的,而你在pom中手动引入的jackson-databind版本为2.5.3,版本过低不存在该类,直接触发类找不到异常,导致内置Tomcat初始化失败。
你的pom配置存在两个直接触发问题的点:
- 引入
spring-boot-starter-web时手动排除了官方默认绑定的jackson-databind、jackson-core依赖,自行引入了过旧的2.5.3版本Jackson,和Spring Boot 2.4.0的自动配置逻辑不匹配 - okhttp3依赖块后多写了一个冗余的
</dependency>闭合标签,会导致Maven解析pom时出现构建异常,需要同步修复
修复方案
按以下步骤调整配置即可解决问题:
- 删除
spring-boot-starter-web依赖中针对jackson-databind、jackson-core的两条排除规则,不要手动剔除Spring Boot官方统一管理的基础JSON依赖 - 删除pom中手动声明的
jackson-databind 2.5.3版本依赖,Spring Boot父依赖管理已经默认配置了和当前版本完全适配的Jackson包,无需单独指定版本 - 删除okhttp3依赖块后方多余的
</dependency>冗余标签,修正XML语法错误 - 如果原有业务代码强依赖旧版Jackson API无法直接升级,可将Spring Boot版本降级到1.5.x系列适配2.5.x版本Jackson;生产环境更推荐升级Jackson到Spring Boot绑定的默认版本,降低后续维护成本
- 配置修改完成后执行
mvn clean install命令重新拉取依赖、清除本地旧版本缓存包,再启动项目即可
额外提示:当前pom中引入了log4j 1.2.15的旧版本依赖,存在公开的高危安全漏洞,如果是生产环境部署,建议移除log4j1相关依赖,统一使用已经配置的log4j2作为日志实现。
内容的提问来源于stack exchange,提问作者Kaushik
相关产品推荐
相关产品推荐

