'How to log payload of WebClient captured with ClientHttpResponseDecorator?
I created a ClientHttpResponseDecorator to capture parts of the WebClient response.
Question: how can I access my ClientHttpResponseDecorator afterwards, so I can log what I saved in my buffer?
Sidenote: I know I could log in a .doOnTerminate() after .doOnNext() in the getBody() method, but that's not what I want. I only want to capture in this class, and log outside.
public class LoggingConnector implements ClientHttpConnector {
private final ClientHttpConnector delegate;
public LoggingConnector(ClientHttpConnector connector) {
this.delegate = connector;
}
@Override
public Mono<ClientHttpResponse> connect(HttpMethod method, URI uri,
Function<? super ClientHttpRequest, Mono<Void>> requestCallback) {
return this.delegate.connect(method, uri, requestCallback).map(LoggingResponse::new);
}
private static class LoggingResponse extends ClientHttpResponseDecorator {
private static final DataBufferFactory bufferFactory = new DefaultDataBufferFactory();
private final DataBuffer buffer = bufferFactory.allocateBuffer();
LoggingResponse(ClientHttpResponse delegate) {
super(delegate);
}
@Override
public Flux<DataBuffer> getBody() {
return super.getBody()
.doOnNext(this.buffer::write); //could be restricted to log only n bytes
}
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
