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 社区中所有即将举行的活动。

查看全部