Spring WebClient - URI журнала и метод при ответе

Я определил 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 фильтр?


person Kamil W    schedule 12.12.2019    source источник


Ответы (1)


Нашел способ:

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());
          });
    };
person Kamil W    schedule 12.12.2019
comment
Любой способ записать тело запроса / ответа? - person user2761431; 25.12.2019