Skip to content

Commit 695dd06

Browse files
committed
fix: Request Parameters not picked up for v1 payload format with multivalue headers enabled (#1256)
1 parent 8e11c96 commit 695dd06

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,9 @@ private static HttpServletRequest generateRequest1(String request, Context lambd
119119
populateQueryStringParameters(v1Request.getQueryStringParameters(), httpRequest);
120120
if (v1Request.getMultiValueQueryStringParameters() != null) {
121121
MultiValueMapAdapter<String, String> queryStringParameters = new MultiValueMapAdapter(v1Request.getMultiValueQueryStringParameters());
122-
queryStringParameters.forEach((k, v) -> httpRequest.setParameter(k, StringUtils.collectionToCommaDelimitedString(v)));
122+
queryStringParameters.forEach((k, v) -> {
123+
httpRequest.setParameter(k, v.toArray(new String[2]));
124+
});
123125
}
124126

125127
if (v1Request.getMultiValueHeaders() != null) {
@@ -155,7 +157,7 @@ private static HttpServletRequest generateRequest2(String request, Context lambd
155157
ServerlessHttpServletRequest httpRequest = new ServerlessHttpServletRequest(servletContext,
156158
v2Request.getRequestContext().getHttp().getMethod(), v2Request.getRequestContext().getHttp().getPath());
157159
populateQueryStringParameters(v2Request.getQueryStringParameters(), httpRequest);
158-
160+
159161
v2Request.getHeaders().forEach(httpRequest::setHeader);
160162

161163
populateContentAndContentType(
@@ -177,6 +179,7 @@ private static HttpServletRequest generateRequest2(String request, Context lambd
177179
private static void populateQueryStringParameters(Map<String, String> requestParameters, ServerlessHttpServletRequest httpRequest) {
178180
if (!CollectionUtils.isEmpty(requestParameters)) {
179181
for (Entry<String, String> entry : requestParameters.entrySet()) {
182+
// fix according to parseRawQueryString
180183
httpRequest.setParameter(entry.getKey(), entry.getValue());
181184
}
182185
}

aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java

+11-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.amazonaws.serverless.proxy.spring;
22

3-
import static org.junit.jupiter.api.Assertions.assertEquals;
4-
53
import java.io.ByteArrayInputStream;
64
import java.nio.charset.StandardCharsets;
75
import java.util.Arrays;
86
import java.util.Collection;
97

8+
import com.amazonaws.serverless.proxy.RequestReader;
9+
import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest;
1010
import org.junit.jupiter.params.ParameterizedTest;
1111
import org.junit.jupiter.params.provider.MethodSource;
1212
import org.springframework.boot.SpringApplication;
@@ -30,6 +30,8 @@
3030

3131
import jakarta.servlet.http.HttpServletRequest;
3232

33+
import static org.junit.jupiter.api.Assertions.*;
34+
3335
public class AwsSpringHttpProcessingUtilsTests {
3436

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

@@ -230,9 +231,13 @@ private static void assertRequest(HttpServletRequest request) {
230231
assertEquals("443", request.getHeader("X-Forwarded-Port"));
231232
assertEquals("POST", request.getMethod());
232233
assertEquals("/async", request.getRequestURI());
233-
assertEquals("value1,value2", request.getParameter("parameter1"));
234-
// to be fixed: assertArrayEquals(new String[]{"value1","value2"}, request.getParameterValues("parameter1"));
235-
234+
assertNotNull(request.getServletContext());
235+
// parameter handling for 2.0 requests is currently not spec compliant and to be fixed in future version
236+
// see also GitHub issue
237+
if (!(request.getAttribute(RequestReader.HTTP_API_EVENT_PROPERTY) instanceof HttpApiV2ProxyRequest)) {
238+
assertEquals("value1", request.getParameter("parameter1"));
239+
assertArrayEquals(new String[]{"value1", "value2"}, request.getParameterValues("parameter1"));
240+
}
236241
}
237242

238243
@MethodSource("data")

0 commit comments

Comments
 (0)