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 的概念。相反,它支持基于自定义程序的方法。但是,如果您将其注册为 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,但这篇文章已经够长了。如果您也渴望在您的应用程序中包含基于超媒体的单元测试,请前往阅读参考文档

干杯!

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,以快速提升您的进度。

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部