Spring Boot 3.1.1升级后启动报NoSuchMethodError求助
Spring Boot 3.1.1 + Spring 6 + JDK17启动报错:NoSuchMethodError on ResponseEntity构造方法
我已将Spring Boot升级至3.1.1版本、Spring升级至6版本并使用JDK17开发,项目编译成功,但安装所有依赖后无法启动应用,出现以下报错:
jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.http.ResponseEntity.
(java.lang.Object, org.springframework.http.HttpStatus)'
对应的pom.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?> 4.0.0 core-service core-service 1.0.0 jar <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.11</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>17</java.version> <spring-cloud.version>2021.0.3</spring-cloud.version> <failOnMissingWebXml>false</failOnMissingWebXml> <sonar.login>cfc0f7400efa552eff5494d65891e7ad18f268ed</sonar.login> <sonar.projectKey>core-service</sonar.projectKey> <sonar.projectName>core-service</sonar.projectName> <sonar.projectVersion>1.0</sonar.projectVersion> <sonar.sources>src/main/java</sonar.sources> <sonar.sourceEncoding>UTF-8</sonar.sourceEncoding> <sonar.branch.name>Build.SourceBranchName</sonar.branch.name> <sonar.branch.longLivedBranches.regex>Build.SourceBranchName</sonar.branch.longLivedBranches.regex> <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis> <jacoco.version>0.8.10</jacoco.version> <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin> <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis> <sonar.jacoco.reportPath>target/jacoco.exec</sonar.jacoco.reportPath> <sonar.java.binaries>target</sonar.java.binaries> <sonar.language>java</sonar.language> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <!-- <sonar.coverage.exclusions>**/QueryConstant.java</sonar.coverage.exclusions> --> </properties> <repositories> <repository> <id>datanucleus</id> <url>http://www.datanucleus.org/downloads/maven2/</url> </repository> <repository> <id>clojars</id> <url>http://clojars.org/repo/</url> </repository> <repository> <id>central</id> <url>http://repo1.maven.org/maven2/</url> </repository> <repository> <id>hortonworks</id> <name>hortonworks repo</name> <url>http://repo.hortonworks.com/content/groups/public</url> </repository> </repositories> <dependencies> <!-- spring dependency --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>6.0.12</version> </dependency> <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <!-- spring dependency end --> <!-- Apache common utility for logs --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.13.0</version> </dependency> <!-- Apache common utility end --> <!-- Lombok Dependency --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <!-- JDBC dependency end --> <!-- JWT --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.0</version> </dependency> <dependency> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> </dependency> <!-- JWT end --> <!-- NGO Common Library --> <!-- NGO Common Library end --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>3.0.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.5.4</version> </dependency> <!-- exclude junit 4 --> <!-- junit 5 --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>1.4.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <dependency> <groupId>io.github.classgraph</groupId> <artifactId>classgraph</artifactId> <version>4.8.139</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.0</version> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <finalName>core-service</finalName> <executable>true</executable> </configuration> </plugin> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> <executions> <execution> <id>jacoco-initialize</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>jacoco-site</id> <phase>package</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <profiles> <profile> <id>local</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <spring.profiles.active>local</spring.profiles.active> </properties> </profile> <profile> <id>dev</id> <properties> <spring.profiles.active>dev</spring.profiles.active> </properties> </profile> <profile> <id>replica</id> <properties> <spring.profiles.active>replica</spring.profiles.active> </properties> </profile> <profile> <id>prod</id> <properties> <spring.profiles.active>prod</spring.profiles.active> </properties> </profile> </profiles>
问题原因
这个报错是依赖版本不兼容导致的核心冲突:
- 声明使用Spring Boot 3.1.1,但parent仍为3.0.11,版本不一致引发依赖混乱
- Spring Cloud 2021.0.3仅兼容Spring Boot 2.6.x-2.7.x,完全不支持Spring Boot 3.x
- 手动指定的
spring-web6.0.12与Spring Boot 3.1.1自带的Spring 6.0.13版本不匹配 spring-cloud-starter-feign1.4.7是老旧版本,属于Spring Cloud Edgware,无法适配Spring 6和Boot 3
解决步骤
1. 统一Spring Boot版本
修改parent版本为3.1.1:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.1</version> <relativePath/> <!-- lookup parent from repository --> </parent>
2. 升级Spring Cloud到兼容版本
Spring Boot 3.1.x对应Spring Cloud 2022.0.4(Kilburn),修改版本属性:
<spring-cloud.version>2022.0.4</spring-cloud.version>
3. 移除手动指定的spring-web依赖
Spring Boot starter会自动管理spring-web版本,删除这段冗余配置:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>6.0.12</version> </dependency>
4. 替换Feign依赖
旧的spring-cloud-starter-feign已被弃用,改用Spring Cloud OpenFeign:
删除旧依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>1.4.7.RELEASE</version> </dependency>
添加新的OpenFeign依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
5. 移除SpringFox依赖
SpringFox 3.0.0不兼容Spring Boot 3.x,且已有springdoc-openapi,直接删除:
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>3.0.0</version> <scope>compile</scope> </dependency>
6. 升级springdoc-openapi到兼容版本
springdoc-openapi 1.5.4不支持Spring Boot 3.x,替换为适配版本:
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.2.0</version> </dependency>
7. 清理依赖并重新构建
执行Maven命令清理旧依赖、更新快照并重新构建:
mvn clean install -U
内容的提问来源于stack exchange,提问作者user2497177
相关产品推荐
相关产品推荐

