【问题标题】:Spring WebClient - Log Uri and Method on responseSpring WebClient - 记录 Uri 和响应方法
【发布时间】:2020-04-05 23:58:22
【问题描述】:

我已经定义了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 过滤器中?

【问题讨论】:

    标签: java spring spring-boot spring-webflux spring-webclient


    【解决方案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());
              });
        };
    

    【讨论】:

    • 有什么方法可以记录请求/响应正文?
    猜你喜欢
    • 2018-10-17
    • 2021-07-21
    • 2015-05-21
    • 2021-02-10
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多