领先一步
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
,但这篇文章已经够长了。如果您也渴望在您的应用程序中包含基于超媒体的单元测试,请前往阅读参考文档。
干杯!