База нововведения —
ApiVersionStrategy. Он понимает, где искать версию (header, query, media type или путь), умеет её парсить как семантическую, знает поддерживаемый диапазон и может автоматически выставлять Deprecation/Sunset-заголовки. То есть вместо самодельных фильтров теперь есть один официальный механизм.В контроллерах появляется новый атрибут
version:
@GetMapping(path = "/account/{id}", version = "1.1")
public Account get() { ... }
Хочешь гибкости — прописываешь
"1.1+", и метод будет жить до тех пор, пока ты явно не создашь новую версию. Функциональные эндпоинты тоже подтянулись — у них теперь есть предикат version("1.2").На клиентской стороне —
ApiVersionInserter, который один раз настраиваешь:
RestClient client = RestClient.builder()
.baseUrl("http://localhost:8080")
.apiVersionInserter(ApiVersionInserter.useHeader("API-Version"))
.build();
// И дальше только версия
client.get().uri("/account/1")
.apiVersion(1.1)
.retrieve()
.body(Account.class);
Тестовые клиенты работают по той же логике.
Статья на Хабр "Нативный API Versioning в Spring 7: долгожданная официальная поддержка"
Демо-проект с тестами и примерами
Документация