Fix response headers

This commit is contained in:
Oleg Zhurakousky
2023-03-08 10:03:27 +01:00
parent 5fd3168a50
commit 2e1741c06e
2 changed files with 14 additions and 3 deletions

View File

@@ -81,9 +81,13 @@ public class WebProxyInvoker {
logger.debug("path: " + path);
}
ProxyHttpServletRequest httpRequest = new ProxyHttpServletRequest(null, httpMethod, path);
// CONTENT
if (StringUtils.hasText((String) request.get("body"))) {
httpRequest.setContent(((String) request.get("body")).getBytes());
}
// REQUEST PARAM
if (request.get("multiValueQueryStringParameters") != null) {
Map<String, List<String>> parameters = (Map<String, List<String>>) request.get("multiValueQueryStringParameters");
for (Entry<String, List<String>> parameter : parameters.entrySet()) {
@@ -91,14 +95,15 @@ public class WebProxyInvoker {
}
}
// HEADERS
Map<String, List<String>> headers = (Map<String, List<String>>) request.get("multiValueHeaders");
HttpHeaders httpHeaders = new HttpHeaders();
for (Entry<String, List<String>> entry : headers.entrySet()) {
// TODO may need to do some header formatting
httpHeaders.addAll(entry.getKey(), entry.getValue());
}
httpRequest.setHeaders(httpHeaders);
return httpRequest;
}
@@ -126,11 +131,13 @@ public class WebProxyInvoker {
apiGatewayResponseStructure.put("body", responseString);
Map<String, List<String>> multiValueHeaders = new HashMap<>();
Map<String, String> headers = new HashMap<>();
for (String headerName : httpResponse.getHeaderNames()) {
multiValueHeaders.put(headerName, httpResponse.getHeaders(headerName));
headers.put(headerName, httpResponse.getHeaders(headerName).toString());
}
// TODO investigate why AWS doesn't like List as value
// apiGatewayResponseStructure.put("headers", multiValueHeaders);
apiGatewayResponseStructure.put("multiValueHeaders", multiValueHeaders);
apiGatewayResponseStructure.put("headers", headers);
byte[] apiGatewayResponseBytes = mapper.writeValueAsBytes(apiGatewayResponseStructure);
StreamUtils.copy(apiGatewayResponseBytes, output);

View File

@@ -26,6 +26,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.springframework.cloud.function.serverless.web.ProxyHttpServletRequest;
import org.springframework.http.HttpHeaders;
import org.springframework.util.ReflectionUtils;
import static org.assertj.core.api.Assertions.assertThat;
@@ -182,6 +183,9 @@ public class WebProxyInvokerTests {
assertThat(request.getContentType()).isEqualTo("application/json");
assertThat(request.getParameterValues("foo").length).isEqualTo(2);
assertThat(request.getParameterValues("foo")[0]).isEqualTo("bar");
assertThat(request.getParameterValues("abc").length).isEqualTo(1);
assertThat(request.getParameterValues("abc")[0]).isEqualTo("xyz");
assertThat(request.getHeaders(HttpHeaders.CONTENT_TYPE).nextElement()).isEqualTo("application/json");
}
@Test