Merge branch '4.1.x'

This commit is contained in:
spencergibb
2024-09-26 16:52:29 -04:00

View File

@@ -19,6 +19,7 @@ package org.springframework.cloud.gateway.server.mvc.handler;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UncheckedIOException;
import org.springframework.cloud.gateway.server.mvc.common.MvcUtils;
import org.springframework.http.client.ClientHttpResponse;
@@ -36,11 +37,22 @@ public class RestClientProxyExchange implements ProxyExchange {
@Override
public ServerResponse exchange(Request request) {
return restClient.method(request.getMethod())
RestClient.RequestBodySpec requestSpec = restClient.method(request.getMethod())
.uri(request.getUri())
.headers(httpHeaders -> httpHeaders.putAll(request.getHeaders()))
.body(outputStream -> copyBody(request, outputStream))
.exchange((clientRequest, clientResponse) -> doExchange(request, clientResponse), false);
.headers(httpHeaders -> httpHeaders.putAll(request.getHeaders()));
if (isBodyPresent(request)) {
requestSpec.body(outputStream -> copyBody(request, outputStream));
}
return requestSpec.exchange((clientRequest, clientResponse) -> doExchange(request, clientResponse), false);
}
private static boolean isBodyPresent(Request request) {
try {
return !request.getServerRequest().servletRequest().getInputStream().isFinished();
}
catch (IOException e) {
throw new UncheckedIOException(e);
}
}
private static int copyBody(Request request, OutputStream outputStream) throws IOException {