我定义了WebClient
:
@Bean
WebClient myWebClient() {
return WebClient.builder()
.baseUrl(baseUrl)
.filter(logRequest())
.filter(logResponse())
.build();
}
private ExchangeFilterFunction logRequest() {
return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> {
log.info("MY_WEB_CLIENT | Performing {} {} request", clientRequest.method(), clientRequest.url());
return Mono.just(clientRequest);
});
}
private ExchangeFilterFunction logResponse() {
return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
log.info("MY_WEB_CLIENT | Respond with {} status code", clientResponse.rawStatusCode());
return Mono.just(clientResponse);
});
}
logResponse
过滤方法中,我记录了响应httpStatusCode
,但我也想添加执行请求httpMethod + uri
。我知道我可以在请求之前访问这些数据(使用ExchangeFilterFunction.ofRequestProcessor()
(,但是有没有办法将这些数据添加到我的logResponse
过滤器中?
找到了方法:
private static ExchangeFilterFunction log() {
return (ClientRequest request, ExchangeFunction next) -> {
log.info("MY_WEB_CLIENT | Performing {} {} request", request.method(), request.url());
return next.exchange(request)
.doOnNext((ClientResponse response) -> {
log.info("MY_WEB_CLIENT | {} {} Respond with {} status code",request.method(), request.url(),
response.rawStatusCode());
});
};