Spring Boot 3升级遇NoSuchMethodError:ResponseEntity.getStatusCode()缺失
解决Spring Boot 3.0.2升级后RestTemplate调用的NoSuchMethodError问题
问题原因
Spring Boot 3.0.2对应Spring Framework 6.x版本,其中org.springframework.http.ResponseEntity.getStatusCode()方法的返回类型从HttpStatus枚举改为了HttpStatusCode接口,你的代码或依赖库中仍有代码在调用该方法并期望返回HttpStatus,导致方法找不到错误。
解决步骤
1. 修改自定义代码中的方法调用
找到所有调用responseEntity.getStatusCode()的代码,根据需求调整:
- 若只需判断状态码类别(如成功、客户端错误),直接使用
HttpStatusCode的内置方法:HttpStatusCode statusCode = responseEntity.getStatusCode(); if (statusCode.is2xxSuccessful()) { // 处理成功逻辑 } else if (statusCode.is4xxClientError()) { // 处理客户端错误 } - 若需要具体的
HttpStatus枚举值,通过状态码数值转换:HttpStatusCode statusCode = responseEntity.getStatusCode(); HttpStatus status = HttpStatus.valueOf(statusCode.value()); if (status == HttpStatus.OK) { // 处理逻辑 }
2. 排查并解决依赖冲突
执行Gradle命令查看依赖树,找出引入旧版Spring模块的第三方依赖:
./gradlew dependencies
找到包含旧版spring-web的依赖,在build.gradle中排除旧版依赖,确保所有Spring相关依赖使用Spring Boot 3.0.2对应的版本:
implementation('第三方依赖坐标') { exclude group: 'org.springframework', module: 'spring-web' }
3. 确认Java版本符合要求
Spring Boot 3.x强制要求Java 17及以上,检查build.gradle中的Java配置:
java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 }
若使用的Java版本低于17,升级至Java 17。
内容的提问来源于stack exchange,提问作者Sachin Mankotia
相关产品推荐
相关产品推荐

