Skip to content

Commit a0e1404

Browse files
committed
Added check to avoid NPE when mapping null request body. Addresses #70
1 parent c677a20 commit a0e1404

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,9 @@ public String getContentType() {
386386

387387
@Override
388388
public ServletInputStream getInputStream() throws IOException {
389+
if (request.getBody() == null) {
390+
return null;
391+
}
389392
byte[] bodyBytes = request.getBody().getBytes();
390393
if (request.isBase64Encoded()) {
391394
bodyBytes = Base64.getMimeDecoder().decode(request.getBody());

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,34 @@ public void base64_binaryResponse_base64Encoding() {
189189
assertTrue(Base64.isBase64(response.getBody()));
190190
}
191191

192+
@Test
193+
public void injectBody_populatedResponse_noException() {
194+
AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/request-body", "POST")
195+
.body("This is a populated body")
196+
.build();
197+
198+
AwsProxyResponse response = handler.proxy(request, lambdaContext);
199+
assertNotNull(response.getBody());
200+
try {
201+
SingleValueModel output = objectMapper.readValue(response.getBody(), SingleValueModel.class);
202+
assertEquals("true", output.getValue());
203+
} catch (IOException e) {
204+
e.printStackTrace();
205+
fail();
206+
}
207+
208+
AwsProxyRequest emptyReq = new AwsProxyRequestBuilder("/echo/request-body", "POST")
209+
.build();
210+
AwsProxyResponse emptyResp = handler.proxy(emptyReq, lambdaContext);
211+
try {
212+
SingleValueModel output = objectMapper.readValue(emptyResp.getBody(), SingleValueModel.class);
213+
assertEquals(null, output.getValue());
214+
} catch (IOException e) {
215+
e.printStackTrace();
216+
fail();
217+
}
218+
}
219+
192220
@Test
193221
public void servletRequestEncoding_acceptEncoding_okStatusCode() {
194222
SingleValueModel singleValueModel = new SingleValueModel();

aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,17 @@ public SingleValueModel echoRequestURL(HttpServletRequest request) {
110110
return valueModel;
111111
}
112112

113+
@RequestMapping(path = "/request-body", method = RequestMethod.POST)
114+
public SingleValueModel helloForPopulatedBody(@RequestBody(required = false) String input) {
115+
SingleValueModel valueModel = new SingleValueModel();
116+
System.out.println("Input: \"" + input + "\"");
117+
if (input != null && !"null".equals(input)) {
118+
valueModel.setValue("true");
119+
}
120+
121+
return valueModel;
122+
}
123+
113124
@RequestMapping(path = "/encoded-request-uri/{encoded-var}", method = RequestMethod.GET)
114125
public SingleValueModel echoEncodedRequestUri(@PathVariable("encoded-var") String encodedVar) {
115126
SingleValueModel valueModel = new SingleValueModel();

0 commit comments

Comments
 (0)