You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot从2.0.3.RELEASE升级至2.4.9并迁移至JDK11后启动失败:OrderedHttpPutFormContentFilter类找不到及后续依赖问题求助

解决Spring Boot从2.0.3迁移到2.4.9 + JDK11启动异常的问题

你的问题核心是依赖版本不一致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-autoconfigurespring-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

火山引擎 最新活动