我正在尝试使用 WebClient 来调用我的restServices . 之前在 RestTemplate 上,我们定义了 ClientHttpRequestInterceptor 并附加到 RestTemplate 以拦截和修改请求 . 使用 WebClient ,有没有办法做同样的事情?
WebClient
RestTemplate
ClientHttpRequestInterceptor
谢谢,
-Sreeni
您可以使用 ExchangeFilterFunction 并在您正在使用的 WebClient 实例上对其进行配置 . 有关详细信息,请参阅Spring Framework reference documentation .
ExchangeFilterFunction
使用WebClient Builder时,可以使用 filter() 方法传递 ExchangeFilterFunction 接口的实现 . 这相当于RestTemplate的ClientHttpRequestInterceptor` .
filter()
RestTemplate的
WebClient Builder文档: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文档:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/function/client/ExchangeFilterFunction.html
例如:
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 回答
您可以使用
ExchangeFilterFunction
并在您正在使用的WebClient
实例上对其进行配置 . 有关详细信息,请参阅Spring Framework reference documentation .使用WebClient Builder时,可以使用
filter()
方法传递ExchangeFilterFunction
接口的实现 . 这相当于RestTemplate的
ClientHttpRequestInterceptor` .WebClient Builder文档: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文档:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/function/client/ExchangeFilterFunction.html
例如: