/** * Filters this exchange function with the given {@code ExchangeFilterFunction}, resulting in a * filtered {@code ExchangeFunction}. * @param filter the filter to apply to this exchange * @return the filtered exchange * @see ExchangeFilterFunction#apply(ExchangeFunction) */ default ExchangeFunction filter(ExchangeFilterFunction filter) { return filter.apply(this); }
@Override public WebClient build() { ExchangeFunction exchange = initExchangeFunction(); ExchangeFunction filteredExchange = (this.filters != null ? this.filters.stream() .reduce(ExchangeFilterFunction::andThen) .map(filter -> filter.apply(exchange)) .orElse(exchange) : exchange); return new DefaultWebClient(filteredExchange, initUriBuilderFactory(), this.defaultHeaders != null ? unmodifiableCopy(this.defaultHeaders) : null, this.defaultCookies != null ? unmodifiableCopy(this.defaultCookies) : null, this.defaultRequest, new DefaultWebClientBuilder(this)); }
@Test public void apply() { ClientRequest request = ClientRequest.create(HttpMethod.GET, DEFAULT_URL).build(); ClientResponse response = mock(ClientResponse.class); ExchangeFunction exchange = r -> Mono.just(response); boolean[] filterInvoked = new boolean[1]; ExchangeFilterFunction filter = (r, n) -> { assertFalse(filterInvoked[0]); filterInvoked[0] = true; return n.exchange(r); }; ExchangeFunction filteredExchange = filter.apply(exchange); ClientResponse result = filteredExchange.exchange(request).block(); assertEquals(response, result); assertTrue(filterInvoked[0]); }