Обновление в основном успешное, за исключением проблемы совместимости во время выполнения, вызванной сторонними или устаревшими внутренними библиотеками, которые все еще зависят от Spring Boot 2.x и RestTemplate API.
Контекст:
- Мое основное приложение сейчас использует:
Spring Boot: 3.x - Spring Framework: 6.x
- JDK: 17
- скомпилированы с Spring Boot 2.x
- используют org.springframework.web.client.RestTemplate
- Внутренний вызов:
ожидаю, что он вернет org.springframework.http.HttpStatus.
Код: Выделить всё
org.springframework.http.client.ClientHttpResponse#getStatusCode()
После обновления во время выполнения я получаю следующую ошибку:
Код: Выделить всё
java.lang.NoSuchMethodError: ‘org.springframework.http.HttpStatus org.springframework.http.client.ClientHttpResponse.getStatusCode()Вот фрагмент трассировки стека:
Код: Выделить всё
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)
Старый (Spring Boot 2.x / Framework 5.x):
HttpStatus ClientHttpResponse.getStatusCode();
Новый (Spring Boot 3.x / Framework 6.x):
HttpStatusCode ClientHttpResponse.getStatusCode();
Старый метод был удален (не устарел), поэтому библиотеки, ожидающие старую подпись, приведут к сбою.
Дополнительные сведения
- Я не могу немедленно обновить эти устаревшие библиотеки — некоторые из них являются внешними, некоторые очень глубоко интегрированы.
- Я уже перенес свой собственный код для использования RestClient вместо RestTemplate.
- Однако устаревшие зависимости по-прежнему используют RestTemplate, и я не могу их изменить.
Подробнее здесь: https://stackoverflow.com/questions/796 ... getstatusc
Мобильная версия