• WebFlux系列(十一)WebClient 日志


    #Java#Spring#WebClient#WebFlux#log#日志#

    WebClient 日志

    视频讲解 : https://www.bilibili.com/video/av83627944/

    WebfluxConsumerApplication.java
    package com.example.webfluxconsumer;
    
    import lombok.extern.log4j.Log4j2;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
    import org.springframework.web.reactive.function.client.WebClient;
    import reactor.core.publisher.Mono;
    
    @Log4j2
    @SpringBootApplication
    public class WebfluxConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(WebfluxConsumerApplication.class, args);
        }
    @RestController
    class EmployeeController {
        @PostMapping("save")
        public Mono<Boolean> save(@RequestBody Mono<Employee> employeeMono) {
            WebClient webClient  = WebClient.builder().baseUrl("http://localhost:8080/save")
                    .filter(logRequest())
                    .filter(logResponse())
                    .build();
            return webClient.post().body(employeeMono, Employee.class).retrieve().bodyToMono(Boolean.class);
        }
        private ExchangeFilterFunction logRequest() {
            return (clientRequest, next) -> {
                log.info("Request: {} {}", clientRequest.method(), clientRequest.url());
                clientRequest.headers()
                        .forEach((name, values) -> values.forEach(value -> log.info("Request: {}={}", name, value)));
                return next.exchange(clientRequest);
            };
        }
        private ExchangeFilterFunction logResponse() {
            return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
                clientResponse.headers().asHttpHeaders()
                        .forEach((name, values) -> values.forEach(value -> log.info("Response: {}={}", name, value)));
                return Mono.just(clientResponse);
            });
        }
    }
    }

    公众号,坚持每天3分钟视频学习

  • 相关阅读:
    可复用的自定义Adapter
    SharedPreference工具类
    MD5工具类
    面试题
    策略模式
    java画图之初体验
    接口与事件之图形界面的认证登录
    “奥特曼“与”小怪兽”的继承者们之战
    “奥特曼攻打小怪兽”java学习打怪升级第一步
    使用智能指针管理对象资源
  • 原文地址:https://www.cnblogs.com/JavaWeiBianCheng/p/12209967.html
Copyright © 2020-2023  润新知