如果您的类路径上具有Spring WebFlux,则还可以选择WebClient
用于调用远程REST服务。与相比RestTemplate
,此客户具有更实用的感觉,并且完全反应灵敏。您可以在Spring Framework文档WebClient
的专用部分中了解有关的更多信息。
Spring BootWebClient.Builder
为您创建并预配置了一个;强烈建议将其注入您的组件中并使用它来创建WebClient
实例。Spring Boot正在配置该构建器以共享HTTP资源,以与服务器相同的方式反映编解码器的设置(请参阅WebFlux HTTP编解码器自动配置),以及更多内容。
以下代码显示了一个典型示例:
@Service
public class MyService {
private final WebClient webClient;
public MyService(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("https://example.org").build();
}
public Mono<Details> someRestCall(String name) {
return this.webClient.get().uri("/{name}/details", name)
.retrieve().bodyToMono(Details.class);
}
}
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资源。
通过提供一个自定义ReactorResourceFactory
或JettyResourceFactory
bean,开发人员可以覆盖Jetty和Reactor Netty的资源配置-这将同时应用于客户端和服务器。
如果希望为客户端覆盖该选择,则可以定义自己的ClientHttpConnector
bean,并完全控制客户端配置。
您可以WebClient
在Spring Framework参考文档中了解有关配置选项的更多信息。
16.2 WebClient自定义
有三种主要的WebClient
自定义方法,具体取决于您希望自定义应用的范围。
为了使所有自定义的范围尽可能缩小,请注入自动配置的内容WebClient.Builder
,然后根据需要调用其方法。 WebClient.Builder
实例是有状态的:构建器上的任何更改都会反映在随后使用它创建的所有客户端中。如果要使用同一构建器创建多个客户端,则还可以考虑使用克隆该构建器WebClient.Builder other = builder.clone();
。
要对所有WebClient.Builder
实例进行应用程序级的附加自定义,您可以声明WebClientCustomizer
bean并WebClient.Builder
在注入点更改本地实例。
最后,您可以使用原始API并使用WebClient.create()
。在这种情况下,不会应用自动配置或WebClientCustomizer
。