#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分钟视频学习