Spring HATEOAS 帶給你設定客戶端的新方式

工程 | Greg L. Turnquist | 2020 年 4 月 22 日 | ...

親愛的 Spring 社群:

隨著 Spring HATEOAS 最近發布的 1.1.0.M3 版本,我們為您帶來了一種設定客戶端的新方式!

建構基於超媒體服務的第一步可能是設定您的伺服器,Spring HATEOAS 透過其 @EnableHypermediaSupport() 提供了很長時間。

下一個主要步驟是建構一個可以解析超媒體輸出的客戶端。 這一直都是可用的,但它要求您了解 Spring Framework 的一些最深層的內部結構。

直到今天。

透過最新版本的 Spring HATEOAS,配置 RestTemplateWebClientWebTestClient 實例變得 *容易得多*。

設定 RestTemplate

Spring HATEOAS 現在建立一個名為 HypermediaRestTemplateConfigurer 的 bean。 取得它,您可以將它應用於您擁有的任何 RestTemplate 實例。

@Bean
RestTemplate restTemplate(HypermediaRestTemplateConfigurer configurer) {
  return configurer.registerHypermediaTypes(new RestTemplate());
}

此範例顯示在建立 RestTemplate 實例後,您可以透過其 registerHypermediaTypes 將其導入到 HypermediaRestTemplateConfigurer 中。 在這種情況下,它會在使用者的應用程式中註冊為 bean。

如果您正在使用 Spring Boot(您應該這樣做!),則有一種更好的方法。

@Bean
RestTemplateCustomizer restTemplateCustomizer(
                                   HypermediaRestTemplateConfigurer configurer) {
    return restTemplate -> {
        configurer.registerHypermediaTypes(restTemplate);
    };
}

這個 bean 會被選取並應用於 Spring Boot 自動配置的 RestTemplateBuilder。 任何時候您需要 RestTemplate,您只需注入 RestTemplateBuilder,應用任何最終調整(憑證、快取設定等),然後調用 build()。 這會為您提供一個具有超媒體支援的具體 RestTemplate

重要事項

Spring Boot 長期以來已經超越了在應用程式內容中註冊單一 RestTemplate bean 的概念。 相反,它支援基於自訂器的途徑。 但是,如果您將 RestTemplate 註冊為 bean,Spring HATEOAS *仍然* 會自動配置它。

無論哪種方式,Spring HATEOAS 都能讓您輕鬆地使用 RestTemplate 註冊超媒體支援。

設定 WebClient 實例

如果您正在使用 Spring WebFlux 建構反應式應用程式,您可能很想使用 WebClient,這是 Spring 最新的內建反應式客戶端。 要為超媒體進行接線,您需要取得 Spring HATEOAS 的 HypermediaWebClientConfigurer

@Bean
WebClient.Builder webClientBuilder(HypermediaWebClientConfigurer configurer) {
  return configurer.registerHypermediaTypes(WebClient.builder());
}

這個 bean 會取得 HypermediaWebClientConfigurer 並將其應用於透過其靜態輔助方法 (builder()) 建立的 WebClient.Builder,並傳回 WebClient.Builder

還記得 Boot 有那個 RestTemplateBuilder 嗎? WebClient 已經在 Spring Framework 中有類似的東西。

如果您想在 Spring Boot 中設定東西,這是您執行此操作的方式

@Bean
WebClientCustomizer webClientCustomizer(HypermediaWebClientConfigurer configurer) {
    return webClientBuilder -> {
        configurer.registerHypermediaTypes(webClientBuilder);
    };
}

Spring Boot 自動配置 WebClient.Builder。 並且它應用任何 WebClientCustomizer bean,使其非常容易新增超媒體支援。 要使用它,只需將 WebClient.Builder 注入到您的應用程式中,套用任何額外的設定(憑證等),然後點擊 build() 以取得 WebClient 實例。

這甚至支援 WebTestClient,但這篇文章已經夠長了。 如果您也渴望在您的應用程式中包含基於超媒體的單元測試,請前往 仔細閱讀參考文檔

乾杯!

取得 Spring 電子報

透過 Spring 電子報保持聯繫

訂閱

領先一步

VMware 提供培訓和認證,以加速您的進度。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔。

了解更多

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

查看全部