Skip to content

Commit

Permalink
fix: Request Parameters not picked up for v1 payload format with mult…
Browse files Browse the repository at this point in the history
…ivalue headers enabled (#1256)
  • Loading branch information
deki committed Feb 4, 2025
1 parent 8e11c96 commit 695dd06
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,9 @@ private static HttpServletRequest generateRequest1(String request, Context lambd
populateQueryStringParameters(v1Request.getQueryStringParameters(), httpRequest);
if (v1Request.getMultiValueQueryStringParameters() != null) {
MultiValueMapAdapter<String, String> queryStringParameters = new MultiValueMapAdapter(v1Request.getMultiValueQueryStringParameters());
queryStringParameters.forEach((k, v) -> httpRequest.setParameter(k, StringUtils.collectionToCommaDelimitedString(v)));
queryStringParameters.forEach((k, v) -> {
httpRequest.setParameter(k, v.toArray(new String[2]));
});
}

if (v1Request.getMultiValueHeaders() != null) {
Expand Down Expand Up @@ -155,7 +157,7 @@ private static HttpServletRequest generateRequest2(String request, Context lambd
ServerlessHttpServletRequest httpRequest = new ServerlessHttpServletRequest(servletContext,
v2Request.getRequestContext().getHttp().getMethod(), v2Request.getRequestContext().getHttp().getPath());
populateQueryStringParameters(v2Request.getQueryStringParameters(), httpRequest);

v2Request.getHeaders().forEach(httpRequest::setHeader);

populateContentAndContentType(
Expand All @@ -177,6 +179,7 @@ private static HttpServletRequest generateRequest2(String request, Context lambd
private static void populateQueryStringParameters(Map<String, String> requestParameters, ServerlessHttpServletRequest httpRequest) {
if (!CollectionUtils.isEmpty(requestParameters)) {
for (Entry<String, String> entry : requestParameters.entrySet()) {
// fix according to parseRawQueryString
httpRequest.setParameter(entry.getKey(), entry.getValue());
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.amazonaws.serverless.proxy.spring;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collection;

import com.amazonaws.serverless.proxy.RequestReader;
import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.springframework.boot.SpringApplication;
Expand All @@ -30,6 +30,8 @@

import jakarta.servlet.http.HttpServletRequest;

import static org.junit.jupiter.api.Assertions.*;

public class AwsSpringHttpProcessingUtilsTests {

private static String API_GATEWAY_EVENT = "{\n"
Expand Down Expand Up @@ -221,7 +223,6 @@ public void validateHttpServletRequestGenerationWithInputStream(String jsonEvent
ByteArrayInputStream inputStream = new ByteArrayInputStream(jsonEvent.getBytes(StandardCharsets.UTF_8));
ServerlessServletContext servletContext = new ServerlessServletContext();
HttpServletRequest request = AwsSpringHttpProcessingUtils.generateHttpServletRequest(inputStream, null, servletContext, mapper);
// spot check some headers
assertRequest(request);
}

Expand All @@ -230,9 +231,13 @@ private static void assertRequest(HttpServletRequest request) {
assertEquals("443", request.getHeader("X-Forwarded-Port"));
assertEquals("POST", request.getMethod());
assertEquals("/async", request.getRequestURI());
assertEquals("value1,value2", request.getParameter("parameter1"));
// to be fixed: assertArrayEquals(new String[]{"value1","value2"}, request.getParameterValues("parameter1"));

assertNotNull(request.getServletContext());
// parameter handling for 2.0 requests is currently not spec compliant and to be fixed in future version
// see also GitHub issue
if (!(request.getAttribute(RequestReader.HTTP_API_EVENT_PROPERTY) instanceof HttpApiV2ProxyRequest)) {
assertEquals("value1", request.getParameter("parameter1"));
assertArrayEquals(new String[]{"value1", "value2"}, request.getParameterValues("parameter1"));
}
}

@MethodSource("data")
Expand Down

0 comments on commit 695dd06

Please sign in to comment.