如果您的类路径上具有Spring WebFlux,则还可以选择WebClient用于调用远程REST服务。与相比RestTemplate,此客户具有更实用的感觉,并且完全反应灵敏。您可以在Spring Framework文档WebClient的专用部分中了解有关的更多信息。
Spring BootWebClient.Builder为您创建并预配置了一个;强烈建议将其注入您的组件中并使用它来创建WebClient实例。Spring Boot正在配置该构建器以共享HTTP资源,以与服务器相同的方式反映编解码器的设置(请参阅WebFlux HTTP编解码器自动配置),以及更多内容。
以下代码显示了一个典型示例:

  1. @Service
  2. public class MyService {
  3. private final WebClient webClient;
  4. public MyService(WebClient.Builder webClientBuilder) {
  5. this.webClient = webClientBuilder.baseUrl("https://example.org").build();
  6. }
  7. public Mono<Details> someRestCall(String name) {
  8. return this.webClient.get().uri("/{name}/details", name)
  9. .retrieve().bodyToMono(Details.class);
  10. }
  11. }

16.1 WebClient运行时

Spring Boot会根据应用程序类路径上可用的库自动检测ClientHttpConnector要使用哪个驱动器WebClient。目前,还支持Reactor Netty和Jetty RS客户端。
spring-boot-starter-webflux启动依赖于io.projectreactor.netty:reactor-netty默认情况下,这使服务器和客户端的实现。如果选择使用Jetty作为反应式服务器,则应在Jetty反应式HTTP客户端库上添加依赖项org.eclipse.jetty:jetty-reactive-httpclient。对服务器和客户端使用相同的技术具有优势,因为它将自动在客户端和服务器之间共享HTTP资源。
通过提供一个自定义ReactorResourceFactoryJettyResourceFactorybean,开发人员可以覆盖Jetty和Reactor Netty的资源配置-这将同时应用于客户端和服务器。
如果希望为客户端覆盖该选择,则可以定义自己的ClientHttpConnectorbean,并完全控制客户端配置。
您可以WebClient在Spring Framework参考文档中了解有关配置选项的更多信息。

16.2 WebClient自定义

有三种主要的WebClient自定义方法,具体取决于您希望自定义应用的范围。
为了使所有自定义的范围尽可能缩小,请注入自动配置的内容WebClient.Builder,然后根据需要调用其方法。 WebClient.Builder实例是有状态的:构建器上的任何更改都会反映在随后使用它创建的所有客户端中。如果要使用同一构建器创建多个客户端,则还可以考虑使用克隆该构建器WebClient.Builder other = builder.clone();
要对所有WebClient.Builder实例进行应用程序级的附加自定义,您可以声明WebClientCustomizerbean并WebClient.Builder在注入点更改本地实例。
最后,您可以使用原始API并使用WebClient.create()。在这种情况下,不会应用自动配置或WebClientCustomizer