Skip to content

Commit 6cd0ab7

Browse files
committed
Changed form parameter parser method to use request input stream instead of the raw API Gateway event body to address #141.
1 parent 8b8741a commit 6cd0ab7

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.apache.commons.fileupload.FileUploadException;
2626
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
2727
import org.apache.commons.fileupload.servlet.ServletFileUpload;
28+
import org.apache.commons.io.IOUtils;
2829
import org.apache.commons.io.input.NullInputStream;
2930
import org.slf4j.Logger;
3031
import org.slf4j.LoggerFactory;
@@ -756,7 +757,12 @@ private Map<String, List<String>> getFormUrlEncodedParametersMap() {
756757
return urlEncodedFormParameters;
757758
}
758759
Timer.start("SERVLET_REQUEST_GET_FORM_PARAMS");
759-
String rawBodyContent = request.getBody();
760+
String rawBodyContent = null;
761+
try {
762+
rawBodyContent = IOUtils.toString(getInputStream());
763+
} catch (IOException e) {
764+
throw new RuntimeException(e);
765+
}
760766

761767
urlEncodedFormParameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
762768
for (String parameter : rawBodyContent.split(FORM_DATA_SEPARATOR)) {

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
import javax.ws.rs.core.MediaType;
1616

1717
import java.io.IOException;
18+
import java.nio.charset.Charset;
19+
import java.util.Base64;
20+
import java.util.Map;
1821
import java.util.Random;
1922

2023
import static org.junit.Assert.assertEquals;
@@ -102,4 +105,18 @@ public void multipart_getParts_binary() {
102105
fail(e.getMessage());
103106
}
104107
}
108+
109+
@Test
110+
public void postForm_getParamsBase64Encoded_expectAllParams() {
111+
AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/form", "POST")
112+
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED).build();
113+
proxyRequest.setBody(Base64.getEncoder().encodeToString(ENCODED_FORM_ENTITY.getBytes(Charset.defaultCharset())));
114+
proxyRequest.setIsBase64Encoded(true);
115+
116+
HttpServletRequest request = new AwsProxyHttpServletRequest(proxyRequest, null, null);
117+
Map<String, String[]> params = request.getParameterMap();
118+
assertNotNull(params);
119+
assertEquals(2, params.size());
120+
assertEquals(true, params.containsKey(PART_KEY_1));
121+
}
105122
}

0 commit comments

Comments
 (0)