polish gh-2193

This commit is contained in:
spencergibb
2021-11-01 15:27:03 -04:00
parent 68dcc35511
commit 3217b05ad7
2 changed files with 11 additions and 7 deletions

View File

@@ -166,6 +166,8 @@ public final class ServerWebExchangeUtils {
*/
public static final String GATEWAY_LOADBALANCER_RESPONSE_ATTR = qualify("gatewayLoadBalancerResponse");
private static final byte[] EMPTY_BYTES = {};
private ServerWebExchangeUtils() {
throw new AssertionError("Must not instantiate utility class.");
}
@@ -346,7 +348,7 @@ public final class ServerWebExchangeUtils {
ServerHttpResponse response = exchange.getResponse();
DataBufferFactory factory = response.bufferFactory();
// Join all the DataBuffers so we have a single DataBuffer for the body
return DataBufferUtils.join(exchange.getRequest().getBody()).defaultIfEmpty(factory.wrap(new byte[] {}))
return DataBufferUtils.join(exchange.getRequest().getBody()).defaultIfEmpty(factory.wrap(EMPTY_BYTES))
.map(dataBuffer -> decorate(exchange, dataBuffer, cacheDecoratedRequest))
.switchIfEmpty(Mono.just(exchange.getRequest())).flatMap(function);
}
@@ -363,12 +365,11 @@ public final class ServerWebExchangeUtils {
ServerHttpRequest decorator = new ServerHttpRequestDecorator(exchange.getRequest()) {
@Override
public Flux<DataBuffer> getBody() {
return Mono.<DataBuffer>fromSupplier(() -> {
return Mono.fromSupplier(() -> {
if (exchange.getAttributeOrDefault(CACHED_REQUEST_BODY_ATTR, null) == null) {
// probably == downstream closed or no body
return null;
}
// TODO: deal with Netty
if (dataBuffer instanceof NettyDataBuffer) {
NettyDataBuffer pdb = (NettyDataBuffer) dataBuffer;
return pdb.factory().wrap(pdb.getNativeBuffer().retainedSlice());

View File

@@ -61,10 +61,13 @@ public class ServerWebExchangeUtilsTests {
MockServerWebExchange exchange = mockExchange(Collections.emptyMap());
exchange.getAttributes().put(CACHED_REQUEST_BODY_ATTR, "foo");
ServerWebExchangeUtils.cacheRequestBodyAndRequest(exchange,
(serverHttpRequest) -> ServerRequest
.create(exchange.mutate().request(serverHttpRequest).build(), HandlerStrategies.withDefaults().messageReaders())
.bodyToMono(DefaultDataBuffer.class)).block();
ServerWebExchangeUtils
.cacheRequestBodyAndRequest(exchange,
(serverHttpRequest) -> ServerRequest
.create(exchange.mutate().request(serverHttpRequest).build(),
HandlerStrategies.withDefaults().messageReaders())
.bodyToMono(DefaultDataBuffer.class))
.block();
}
private MockServerWebExchange mockExchange(Map<String, String> vars) {