WebClient
如果在类路径上有Spring WebFlux,则还可以选择WebClient
用于调用远程REST服务。相比之下RestTemplate
,这个客户端具有更多的功能感并且完全被动。您可以在Spring Framework文档WebClient
的专用 部分中了解有关该内容的更多信息。
Spring Boot WebClient.Builder
为您创建并预配置一个; 强烈建议将其注入组件并使用它来创建WebClient
实例。Spring Boot正在配置该构建器以共享HTTP资源,以与服务器相同的方式反映编解码器设置(请参阅 WebFlux HTTP编解码器自动配置)等。
以下代码显示了一个典型示例:
1 |
|
WebClient运行时
Spring Boot将自动检测ClientHttpConnector
用于驱动的驱动程序WebClient
,具体取决于应用程序类路径上可用的库。目前,支持Reactor Netty和Jetty RS客户端。
在spring-boot-starter-webflux
启动依赖于io.projectreactor.netty:reactor-netty
默认情况下,这使服务器和客户端的实现。如果您选择将Jetty用作反应式服务器,则应该在Jetty Reactive HTTP客户端库上添加依赖项org.eclipse.jetty:jetty-reactive-httpclient
。对服务器和客户端使用相同的技术具有优势,因为它将自动在客户端和服务器之间共享HTTP资源。
开发人员可以通过提供自定义ReactorResourceFactory
或JettyResourceFactory
bean 来覆盖Jetty和Reactor Netty的资源配置- 这将应用于客户端和服务器。
如果您希望覆盖客户端的该选项,则可以定义自己的 ClientHttpConnector
bean并完全控制客户端配置。
您可以WebClient
在Spring Framework参考文档中了解有关配置选项的更多信息 。
WebClient自定义
WebClient
自定义有三种主要方法,具体取决于您希望自定义应用的广泛程度。
要使任何自定义的范围尽可能窄,请注入自动配置 WebClient.Builder
,然后根据需要调用其方法。WebClient.Builder
实例是有状态的:构建器上的任何更改都会反映在随后使用它创建的所有客户端中。如果要使用相同的构建器创建多个客户端,还可以考虑使用克隆构建器WebClient.Builder other = builder.clone();
。
要对所有WebClient.Builder
实例进行应用程序范围的附加自定义,您可以声明WebClientCustomizer
bean并WebClient.Builder
在注入点更改本地。
最后,您可以回退到原始API并使用WebClient.create()
。在这种情况下,不会自动配置或WebClientCustomizer
应用。