Skip to content

Commit 14a4333

Browse files
committed
Addressed duplicate parameters bug reported in #86 and added unit test for it.
1 parent 488b7a0 commit 14a4333

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,7 @@ public class AwsProxyHttpServletRequest extends AwsHttpServletRequest {
8888
//-------------------------------------------------------------
8989

9090
public AwsProxyHttpServletRequest(AwsProxyRequest awsProxyRequest, Context lambdaContext, SecurityContext awsSecurityContext) {
91-
super(lambdaContext);
92-
this.request = awsProxyRequest;
93-
this.securityContext = awsSecurityContext;
94-
this.config = ContainerConfig.defaultConfig();
95-
96-
this.urlEncodedFormParameters = getFormUrlEncodedParametersMap();
97-
this.multipartFormParameters = getMultipartFormParametersMap();
91+
this(awsProxyRequest, lambdaContext, awsSecurityContext, ContainerConfig.defaultConfig());
9892
}
9993

10094
public AwsProxyHttpServletRequest(AwsProxyRequest awsProxyRequest, Context lambdaContext, SecurityContext awsSecurityContext, ContainerConfig config) {
@@ -506,7 +500,7 @@ public Map<String, String[]> getParameterMap() {
506500

507501
if (request.getQueryStringParameters() != null) {
508502
for (Map.Entry<String, String> entry : request.getQueryStringParameters().entrySet()) {
509-
if (params.containsKey(entry.getKey())) {
503+
if (params.containsKey(entry.getKey()) && !params.get(entry.getKey()).contains(entry.getValue())) {
510504
params.get(entry.getKey()).add(entry.getValue());
511505
} else {
512506
List<String> valueList = new ArrayList<>();

aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import java.util.Collections;
1313
import java.util.List;
14+
import java.util.Map;
1415

1516
import static org.junit.Assert.*;
1617

@@ -42,6 +43,9 @@ public class AwsProxyHttpServletRequestTest {
4243
.cookie(FORM_PARAM_TEST, FORM_PARAM_NAME_VALUE).build();
4344
private static final AwsProxyRequest REQUEST_MALFORMED_COOKIE = new AwsProxyRequestBuilder("/hello", "GET")
4445
.header(HttpHeaders.COOKIE, QUERY_STRING_NAME_VALUE).build();
46+
private static final AwsProxyRequest REQUEST_MULTIPLE_FORM_AND_QUERY = new AwsProxyRequestBuilder("/hello", "POST")
47+
.form(FORM_PARAM_NAME, FORM_PARAM_NAME_VALUE)
48+
.queryString(FORM_PARAM_TEST, QUERY_STRING_NAME_VALUE).build();
4549

4650
private static final AwsProxyRequest REQUEST_NULL_QUERY_STRING;
4751
static {
@@ -177,4 +181,25 @@ public void queryParameters_getParameterNames_notNull() {
177181
assertEquals(1, parameterNames.size());
178182
assertTrue(parameterNames.contains(FORM_PARAM_NAME));
179183
}
184+
185+
@Test
186+
public void queryParameter_getParameterMap_avoidDuplicationOnMultipleCalls() {
187+
HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_MULTIPLE_FORM_AND_QUERY, null, null);
188+
189+
Map<String, String[]> params = request.getParameterMap();
190+
assertNotNull(params);
191+
assertEquals(2, params.size());
192+
assertNotNull(params.get(FORM_PARAM_NAME));
193+
assertEquals(1, params.get(FORM_PARAM_NAME).length);
194+
assertNotNull(params.get(FORM_PARAM_TEST));
195+
assertEquals(1, params.get(FORM_PARAM_TEST).length);
196+
197+
params = request.getParameterMap();
198+
assertNotNull(params);
199+
assertEquals(2, params.size());
200+
assertNotNull(params.get(FORM_PARAM_NAME));
201+
assertEquals(1, params.get(FORM_PARAM_NAME).length);
202+
assertNotNull(params.get(FORM_PARAM_TEST));
203+
assertEquals(1, params.get(FORM_PARAM_TEST).length);
204+
}
180205
}

0 commit comments

Comments
 (0)