抢先一步
VMware 提供培训和认证,以加速您的进步。
了解更多亲爱的 Spring 社区:
随着 Spring HATEOAS 最近的 1.1.0.M3
版本的发布,我们为您带来了一种配置客户端的新方法!
构建基于超媒体的服务的第一个步骤可能是配置您的服务器,Spring HATEOAS 长期以来通过其 @EnableHypermediaSupport()
提供了此功能。
下一个主要步骤是构建可以解析该超媒体输出的客户端。 这始终是可用的,但是它要求您了解 Spring Framework 的一些最深层的内部结构。
直到今天。
使用最新版本的 Spring HATEOAS,配置 RestTemplate
、WebClient
或 WebTestClient
实例容易得多。
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 的概念。 相反,它支持基于定制器的方法。 但是,如果您将其注册为 bean,Spring HATEOAS 仍然会自动配置 RestTemplate
。
无论哪种方式,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
,但是这篇文章已经足够长了。 如果您渴望在您的应用程序中也包含基于超媒体的单元测试,请去 阅读参考文档。
干杯!