WebClient属于WebFlux的一部分,是一组非阻塞、响应式API,主要用于HTTP请求。WebFlux的客户端和服务端在HTTP通信方面依赖的是同一套非阻塞模块。
默认情况下,WebClient底部通信使用的是Reactor Netty框架,同时它也支持其他通信框架使用插件式的方式整合进来(使用ClientHttpConnector)。
1、配置
在代码中创建WebClient 可以通过以下静态方法:
WebClient.create()
WebClient.create(String baseUrl)
以上方法使用的是默认配置下的Reactor Netty的HttpClient
,并且需要依赖:io.projectreactor.netty:reactor-netty
。
WebClient.builder()方法也提供以下几个参数可供用户配置:
uriBuilderFactory:
defaultHeader: HTTP请求头
defaultCookie: 设置Cookies.
defaultRequest
filter: 客户端过滤器,可以对每个请求进行统一的处理
exchangeStrategies: HTTP message reader/writer customizations.
clientConnector: HTTP client library settings.
配置示例:
ExchangeStrategies strategies = ExchangeStrategies.builder()
.codecs(configurer -> {
// ...
})
.build();
WebClient client = WebClient.builder()
.exchangeStrategies(strategies)
.build();
WebClient 实例一旦被创建,本身是无法修改的;但可以通过创建一个“副本”的方法进行修改:
WebClient client1 = WebClient.builder()
.filter(filterA).filter(filterB).build();
WebClient client2 = client1.mutate()
.filter(filterC).filter(filterD).build();
// client1 has filterA, filterB
// client2 has filterA, filterB, filterC, filterD