java - Spring WebClient - 响应时记录 Uri 和方法

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

我已经定义了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());
          });
    };

关于java - Spring WebClient - 响应时记录 Uri 和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59307195/

相关文章:

spring - 将 spring boot war 部署到 tomcat 中

java - 为什么 JDO 认为这个分离对象是干净的?

java - ANDROID 如何检查两个按钮是否同时保持在一起?

java - Spring Boot - 缓存不起作用,如何正确设置缓存?

spring - Spring Boot 2.0.0 中的 'UndertowEmbeddedServletContainerFactory' 在哪里?

java - Spring Boot requestDataValueProcessor Bean 定义冲突

java - 距离矩阵实现

java - 在java中使用try--catch捕获sql相关的错误(记录错误)

java - 使用 Spring MessageListener 分组消费消息?

java - 解析headers信息并设置到bean中