自項目早期里程碑以來,IntelliJ IDEA 團隊一直與 Spring Framework 團隊緊密合作,確保無縫集成與可靠的工具支持。“我們衷心感謝他們的協作、真知灼見和早期反饋——沒有他們的幫助和專業知識,此次版本發佈將無從談起。”
官方表示,Spring 7 已實現在 IntelliJ IDEA 2025.3 中的開箱即用。
REST API 版本控制
Spring 7終於引入了內置的一流版本機制。現在你可以在映射註解中直接定義版本:
@GetMapping(path = "/quote", version = "1.0+")
ResponseEntity<Quote> getQuote() {
Quote result = quoteService.getRandomQuote();
return ResponseEntity.ok(result);
}
IntelliJ IDEA 會自動檢測版本控制。IDE 會檢查你的應用是否配置了版本控制,識別你使用的是屬性還是ApiVersionConfigurer類,如果出現問題還會發出警告。如果你忘記啓用版本控制,IDE 不僅會指出問題所在,還會告訴你如何修復。
默認情況下,IntelliJ IDEA 建議使用基於屬性的配置,通過頭部屬性啓用版本控制。這是一個安全的起點,如果需要進行更復雜的操作,可以稍後進行調整。
spring.mvc.apiversion.use.header=Api-Version
可以在@GetMapping註解中的版本號上按住 Ctrl 鍵點擊,直接跳轉至配置代碼。IDE 還會檢查你的版本值是否遵循標準的 SemVer 規則。
如果你使用的是自定義版本解析器,IntelliJ IDEA 不會進行干擾。
Testing versioned APIs
在測試方面,你可以採用直接的方式,保持簡單。
mockMvc.perform(get("/api/quote")
.accept(MediaType.APPLICATION_JSON)
.header("API-Version", "1.0")
)
另一方面,Spring 7 允許你為測試配置 API 版本控制,並提供了一個新的 API ——apiVersion方法:
IntelliJ IDEA 瞭解此 API,並會幫助你配置測試的版本控制。對於 header-based 的版本控制,代碼如下所示:
@TestConfiguration
static class QuoteControllerTestConfig implements MockMvcBuilderCustomizer {
@Override
public void customize(ConfigurableMockMvcBuilder<?> builder) {
builder.apiVersionInserter(ApiVersionInserter.useHeader("Api-Version"));
}
}
此配置允許你在單個類中定義版本控制方法,從而大大簡化測試維護。
HTTP Interface Clients
目前,要支持 HTTP Interface client 的版本控制,仍然需要手動編寫配置。IntelliJ IDEA 2025.3 將 HTTP 接口識別為 bean —— 不再出現“紅色波浪線”或“無法解析 bean”的警告。無論在何處使用這些客户端,都將獲得完整的自動補全、導航和注入支持。
spring.http.serviceclient.default.apiversion.default-version=1.0.0
spring.http.serviceclient.default.apiversion.insert.header=API-Version
還可以查看每個客户端的引用位置——直接通過側邊欄圖標或“Structure”工具窗口即可查看。展望未來,項目團隊還在開發能夠檢測未註冊客户端或錯誤導入的檢查功能,甚至可以幫助開發者根據 OpenAPI 規範生成客户端。簡而言之,就是讓開發者減少編寫 HTTP 客户端的時間,從而將更多精力投入到改進他們調用的 API 上。
Dynamic Bean Registration
新特性:BeanRegistrar 接口。有時需要動態註冊 Bean,而@Conditional 註解無法滿足需求。Spring 7 在能讓你以更優雅的方式實現:
public class QuoteProviderRegistrar implements BeanRegistrar {
@Override
public void register(BeanRegistry registry, Environment env) {
registry.registerBean("quoteProviderDb", QuoteProviderDb.class);
registry.registerBean("quoteProviderFallback", QuoteProviderFallback.class);
}
}
如果你的 bean 構造邏輯變得複雜或依賴於多個因素,那麼 programmatic bean registration 就是一種巧妙的處理方法。IntelliJ IDEA 可以動態識別這些 bean,因此你將不再看到那些煩人的“未解析的注入”警告。你可以直接從注入點導航到註冊。
IDE 無法預料到動態註冊的所有極端情況——這正是 Spring Debugger發揮作用之處。在調試複雜的配置時,它會準確地顯示運行時注入的內容。
更多詳情可查看:https://blog.jetbrains.com/idea/2025/11/intellij-idea-2025-3-spring-7/