Spring Boot从2.0.3.RELEASE升级至2.4.9并迁移至JDK11后启动失败:OrderedHttpPutFormContentFilter类找不到及后续依赖问题求助
你的问题核心是依赖版本不一致和Spring Boot 2.3+之后的依赖规则变更导致的,下面分步骤帮你解决:
1. 修复OrderedHttpPutFormContentFilter类找不到的问题
这个类找不到的根本原因是子pom里的spring-boot-autoconfigure依赖版本(2.0.6.RELEASE)和升级后的Spring Boot核心版本(2.4.9)不匹配。Spring Boot的各个组件版本必须严格统一,否则会出现类路径冲突或缺失。
正确处理方式:
- 确保父pom继承Spring Boot 2.4.9的parent,这样所有Spring Boot相关依赖会自动使用统一版本,不用手动指定:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.9</version> <relativePath/> <!-- 从仓库拉取父依赖 --> </parent>
- 移除子pom中所有手动指定版本的Spring Boot相关依赖(比如
spring-boot-autoconfigure、spring-boot-starter-web等),让parent统一管理版本,彻底避免版本混乱。
补充:
OrderedHttpPutFormContentFilter在Spring Boot 2.4.x中依然存在,只是版本不一致导致类加载失败,统一版本后这个问题会自动消失。
2. 修复javax.validation.NoProviderFoundException异常
从Spring Boot 2.3版本开始,Bean Validation(JSR-380)的依赖不再默认包含在spring-boot-starter-web里,需要单独引入spring-boot-starter-validation来添加Hibernate Validator(默认的Bean Validation实现)。
在pom中添加以下依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
因为已经继承了Spring Boot parent,不需要指定版本,会自动匹配2.4.9对应的兼容版本。
3. JDK11适配的额外注意点
迁移到JDK11后,要确保pom中明确指定正确的Java版本:
<properties> <java.version>11</java.version> </properties>
Spring Boot 2.4.x完全支持JDK11,只要版本统一,不会有兼容性问题。
4. 处理SLF4J多绑定警告
启动时的SLF4J多绑定警告,通常是因为多个依赖中包含了不同的SLF4J实现(比如logback和log4j)。你可以执行mvn dependency:tree命令查看依赖树,找到重复的SLF4J实现依赖,然后在对应的依赖中排除多余的部分。例如:
<dependency> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> </exclusion> </exclusions> </dependency>
最后,建议执行mvn clean install清理并重新构建项目,确保所有依赖都正确下载并生效。
内容的提问来源于stack exchange,提问作者Abhiram S




