Das Upgrade ist größtenteils erfolgreich, mit Ausnahme eines Laufzeitkompatibilitätsproblems, das durch interne Bibliotheken von Drittanbietern oder älteren Versionen verursacht wird, die immer noch von Spring Boot 2.x und der RestTemplate-API abhängen.
Kontext:
- Meine Hauptanwendung verwendet jetzt:
Spring Boot: 3.x - Spring Framework: 6.x
- JDK: 17
- gegen Spring Boot 2.x kompiliert werden
- org.springframework.web.client.RestTemplate verwenden
- Interner Aufruf:
erwarte, dass es org.springframework.http.HttpStatus zurückgibt.
Code: Select all
org.springframework.http.client.ClientHttpResponse#getStatusCode()
Nach dem Upgrade erhalte ich während der Laufzeit die folgende Fehlermeldung:
Code: Select all
java.lang.NoSuchMethodError: ‘org.springframework.http.HttpStatus org.springframework.http.client.ClientHttpResponse.getStatusCode()Hier ist ein Ausschnitt aus dem Stack-Trace:
Code: Select all
Caused by: java.lang.NoSuchMethodError: ‘org.springframework.http.HttpStatus org.springframework.http.client.ClientHttpResponse.getStatusCode()’
at com.legacy.sdk.interceptor.LegacyInterceptor.intercept(LegacyInterceptor.java:46)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:900)
Alt (Spring Boot 2.x / Framework 5.x):
HttpStatus ClientHttpResponse.getStatusCode();
Neu (Spring Boot 3.x / Framework 6.x):
HttpStatusCode ClientHttpResponse.getStatusCode();
Die alte Methode wurde entfernt (nicht veraltet), sodass Bibliotheken, die die alte Signatur erwarten, abstürzen.
Zusätzliche Details
- Ich kann diese Legacy-Bibliotheken nicht sofort aktualisieren – einige sind extern, andere sehr tief integriert.
- Ich habe meinen eigenen Code bereits migriert, um stattdessen RestClient zu verwenden RestTemplate.
- Altabhängige Abhängigkeiten verwenden jedoch immer noch RestTemplate, und ich kann sie nicht ändern.
Mobile version