问题
I am trying to use the WebClient
to call my restServices. Previously on RestTemplate
, we had ClientHttpRequestInterceptor
defined and attached to the RestTemplate
to intercept and modify the requests. With the WebClient
, is there a way to do the same ?
Thanks,
-Sreeni
回答1:
When you are using the WebClient Builder you can pass in implementations of the ExchangeFilterFunction
interface using the filter()
method. This is the equivalent of the ClientHttpRequestInterceptor
for `RestTemplate.
WebClient Builder Docs: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/function/client/WebClient.Builder.html#filter-org.springframework.web.reactive.function.client.ExchangeFilterFunction-
ExchangeFilterFunction Docs: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/function/client/ExchangeFilterFunction.html
For example:
WebClient webClient = WebClient.builder()
.baseUrl("http://localhost:8080|)
.filter(logFilter())
.build();
private ExchangeFilterFunction logFilter() {
return (clientRequest, next) -> {
logger.info("External Request to {}", clientRequest.url());
return next.exchange(clientRequest);
};
}
回答2:
You can use an ExchangeFilterFunction
and configure it on the WebClient
instance you’re using. See the Spring Framework reference documentation for more on that.
来源:https://stackoverflow.com/questions/51726943/how-to-intercept-a-request-when-using-springboot-webclient