我正在将我的 springboot 应用程序从 springboot 2.9.7 升级到 springboot 3.0.2。 在进行干净构建时,我收到以下与 Rest API 调用相关的错误(使用 Rest 模板)。
引起:java.lang.NoSuchMethodError:'org.springframework.http.HttpStatus org.springframework.http.ResponseEntity.getStatusCode()'
据我了解,这与由于 springboot 版本升级到 3.0.2 而导致 springframework 升级到某些 6.. 版本有关。
有人遇到过这个问题吗?如何解决这个问题。
这是一个gradle项目。我添加了以下与 Spring Boot 升级相关的配置。
springBootVersion = '3.0.2'
除此之外,它是一个简单的 Spring Boot 微服务,我们有一个端点,它在内部调用另一个 Rest API 等。
我只将 spring boot 版本从 2.9.7 更改为 springboot 3.0.2,并且它开始失败并出现上述错误。
Caused by: java.lang.NoSuchMethodError: 'org.springframework.http.HttpStatus
org.springframework.http.ResponseEntity.getStatusCode()'
错误表示不存在返回
getStatusCode()
的方法 HttpStatus
。这是正确的,因为新版本的 Spring 中这个方法返回的是 HttpStatusCode
。
// HttpStatus status = responseEntity.getStatusCode();
// Should be ↓
HttpStatusCode statusCode = responseEntity.getStatusCode();
int statusCodeValue = responseEntity.getStatusCode().value();
分析错误日志,
getStatusCode()
返回HttpStatusCode
,所以必须导入HttpStatusCode。
org.springframework.http.HttpStatus
。
HttpStatusCode
。getStatusCode()
的 HttpStatus
会抛出 NoSuchMethod
异常。import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
public class TestController {
public void Test() {
ResponseEntity<Object> responseEntity = ResponseEntity.status(200).build();
HttpStatusCode statusCode = responseEntity.getStatusCode();
}
}
如您所见,HttpStatus 未导入。我希望它会有所帮助谢谢:)