问题
I am trying to log request body in web-flux following : webflux-demo But I end up with empty string all the time even when I pass request body. The requestBody.map does not get executed. It skips the block. What am I missing?
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
if(logging.enabled()){
ServerHttpRequest request = exchange.getRequest();
System.out.println("Request body : " + getRequestBody(request));
return chain.filter(exchange);
} else {
return chain.filter(exchange);
}
}
private String getRequestBody(ServerHttpRequest request) {
final ServerHttpRequest decorated = new ServerHttpRequestDecorator(request);
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Flux<DataBuffer> requestBody = decorated.getBody();
requestBody.map(dataBuffer -> {
try {
Channels.newChannel(byteArrayOutputStream)
.write(dataBuffer.asByteBuffer().asReadOnlyBuffer());
} catch (IOException e) {
logger.error("Unable to log input request due to an error", e);
}
return dataBuffer;
});
return byteArrayOutputStream.toString();
}
来源:https://stackoverflow.com/questions/59435754/logging-post-request-body-in-web-flux