What is the right way to take the value from requestBody and put it in the Header?
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
return exchange.getRequest()
.getBody()
.map(dataBuffer -> dataBuffer.asInputStream(true))
.reduce(SequenceInputStream::new)
.map(inputStream -> new BufferedReader(new InputStreamReader(inputStream)).lines()
.collect(Collectors.joining("\n")))
.map(this::getRequestRqUid)
.flatMap(rqUid -> chain.filter(exchange)
.subscriberContext(ctx -> ctx.put(RQUID_HEADER, rqUid)));
}
The problem is that I open Flux DataBuffer
How to properly close it or use a copy with DefaultDataBufferFactory?
It turned out to implement as a basis took ServerWebExchangeUtils from spring-cloud-gateway-server