java.lang.NoSuchMethodError: 'org.springframework.http.HttpStatus org.springframework.http.client.ClientHttpResponse.getStatusCode()'

Dav*_*vis 10 java spring-boot

我已将 spring boot 版本从 2.7.5 更新到 3.0.2 。我也更新了雅加达。仅当尝试获取 url 时,才会出现以下错误:

java.lang.NoSuchMethodError: 'org.springframework.http.HttpStatus org.springframework.http.client.ClientHttpResponse.getStatusCode()'
at org.springframework.security.oauth2.client.http.OAuth2ErrorHandler.hasError(OAuth2ErrorHandler.java:76) \~\[spring-security-oauth2-2.0.17.RELEASE.jar:na\]
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:904) \~\[spring-web-6.0.4.jar:6.0.4\]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:864) \~\[spring-web-6.0.4.jar:6.0.4\]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:804) \~\[spring-web-6.0.4.jar:6.0.4\]
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:665) \~\[spring-web-6.0.4.jar:6.0.4\]
at com.mbusa.gm.repository.OneApiRepository.getVehicleFromSWT(OneApiRepository.java:178) \~\[classes/:na\]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) \~\[na:na\]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) \~\[na:na\]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) \~\[na:na\]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) \~\[na:na\]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) \~\[spring-aop-6.0.4.jar:6.0.4\]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) \~\[spring-aop-6.0.4.jar:6.0.4\]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) \~\[spring-aop-6.0.4.jar:6.0.4\]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) \~\[spring-aop-6.0.4.jar:6.0.4\]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) \~\[spring-tx-6.0.4.jar:6.0.4\]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) \~\[spring-aop-6.0.4.jar:6.0.4\]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752) \~\[spring-aop-6.0.4.jar:6.0.4\]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) \~\[spring-aop-6.0.4.jar:6.0.4\]
at com.mbusa.gm.repository.OneApiRepository$$SpringCGLIB$$0.getVehicleFromSWT(\<generated\>) \~\[classes/:na\]
at com.mbusa.gm.service.GreyMarketService.addVehicleExport(GreyMarketService.java:47) \~\[classes/:na\]
at com.mbusa.gm.controller.GreyMarketController.addVehicleExport(GreyMarketController.java:98) \~\[classes/:na\]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) \~\[na:na\]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) \~\[na:na\]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) \~\[na:na\]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) \~\[na:na\]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207) \~\[spring-web-6.0.4.jar:6.0.4\]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152) \~\[spring-web-6.0.4.jar:6.0.4\]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) \~\[spring-webmvc-6.0.4.jar:6.0.4\]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) \~\[spring-webmvc-6.0.4.jar:6.0.4\]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) \~\[spring-webmvc-6.0.4.jar:6.0.4\]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) \~\[spring-webmvc-6.0.4.jar:6.0.4\]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1080) \~\[spring-webmvc-6.0.4.jar:6.0.4\]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:973) \~\[spring-webmvc-6.0.4.jar:6.0.4\]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) \~\[spring-webmvc-6.0.4.jar:6.0.4\]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) \~\[spring-webmvc-6.0.4.jar:6.0.4\]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:731) \~\[tomcat-embed-core-10.1.5.jar:6.0\]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) \~\[spring-webmvc-6.0.4.jar:6.0.4\]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814) \~\[tomcat-embed-core-10.1.5.jar:6.0\]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) \~\[tomcat-embed-websocket-10.1.5.jar:10.1.5\]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) \~\[spring-web-6.0.4.jar:6.0.4\]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) \~\[spring-web-6.0.4.jar:6.0.4\]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) \~\[spring-web-6.0.4.jar:6.0.4\]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) \~\[spring-web-6.0.4.jar:6.0.4\]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) \~\[spring-web-6.0.4.jar:6.0.4\]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) \~\[spring-web-6.0.4.jar:6.0.4\]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:859) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1734) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) \~\[tomcat-embed-core-10.1.5.jar:10.1.5\]
at java.base/java.lang.Thread.run(Thread.java:833) \~\[na:na\]
Run Code Online (Sandbox Code Playgroud)

针对此错误我应该更新或更改什么?

Mik*_*048 7

您已经进行了主要版本跳跃,从spring-boot2.X 到spring-boot3.X - 您必须预料到将会出现不兼容的更改。现在这个有问题的方法已经改变了返回值,请检查源代码。我认为问题很清楚 - 在 JVM 字节码中,您有一个具有与您预期不同的签名的方法版本(注意,对于 JVM返回类型是调用指令的一部分,也是签名的一部分):

  1. spring-web在编译和运行时您有不同的JAR。这种情况是有可能发生的,CS中甚至有一个概念叫做依赖地狱。由于此返回类型更改是不兼容的,因此您的代码甚至不应该编译,但您仍然可以这样做。您需要确保编译类路径spring-web与运行时类路径具有相同的 jar。

  2. 您拥有已使用旧spring-web版本编译的代码,现在您正在启动一个 jar,提供具有较新版本的spring-web. 虽然不太可能,但仍然值得一提。

最后,有一些很好的文章可以说明您遇到的问题。考虑看一下。