'AWS Lambda parameter passing error | API Gateway
I am working with a simple AWS Lambda function :
public class CreateOrderLambda {
private final ObjectMapper objectMapper = new ObjectMapper();
// This Particular Order needs to be saved to the DynamoDB.
private final DynamoDB dynamoDB = new DynamoDB(AmazonDynamoDBClientBuilder.defaultClient());
public APIGatewayProxyResponseEvent createOrder(final APIGatewayProxyRequestEvent input,
final Context context)
throws JsonProcessingException {
Order thisOrder = objectMapper.readValue(input.getBody(), Order.class);
Now, Here is how the template looks like :-
CreateOrdersFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabspw/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: ordersapi
Handler: com.aditya.learn.function.CreateOrderLambda::createOrder
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref OrdersTable
Events:
OrderEvents:
Type: Api
Properties:
Path: /orders
Method: POST
While I hit the aforesaid API through API Gateway, I am able to execute the request well :-
curl --location --request POST 'https://o2cf5ti7ik.execute-api.us-east-1.amazonaws.com/Prod/orders/' \
--header 'Content-Type: application/json' \
--data-raw '{
"id":1001,
"itemName":"Nariyal",
"quantity":3
}'
But, while testing the Lambda standalone from console with following request :
{
"id": 1004,
"itemName": "HoneyAlmondFlakes",
"quantity": 7
}
It gives following error :-
START RequestId: 63aa8edd-38b3-408e-8727-652393964f14 Version: $LATEST
argument "content" is null: java.lang.IllegalArgumentException
java.lang.IllegalArgumentException: argument "content" is null
at com.fasterxml.jackson.databind.ObjectMapper._assertNotNull(ObjectMapper.java:4757)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3515)
at com.aditya.learn.function.CreateOrderLambda.createOrder(CreateOrderLambda.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
END RequestId: 63aa8edd-38b3-408e-8727-652393964f14
REPORT RequestId: 63aa8edd-38b3-408e-8727-652393964f14 Duration: 4.72 ms Billed Duration: 5 ms Memory Size: 512 MB Max Memory Used: 134 MB
Basically, it's not able to typecast the request into the custom object.
Is the API0Gateway passing the request to Lambda in some special way ? What am I missing in testing the Lambda standalone ?
Any help shall be highly appreciated.
Basis of Marcin's response :-
Tried with following structure of event :-
{
"resource": "/",
"path": "/",
"httpMethod": "POST",
"requestContext": {
"id":7,
"itemName":"Flakes",
"quantity":6,
"resourcePath": "/",
"httpMethod": "POST",
"path": "/Prod/",
"requestId": "JKJaXmPLvHcESHA=",
"time": "23/Jan/2021:05:16:23 +0000"
},
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-encoding": "gzip, deflate, br",
"Host": "70ixmpl4fl.execute-api.us-east-2.amazonaws.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-5e66d96f-7491f09xmpl79d18acf3d050"
},
"multiValueHeaders": {
"accept": [
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
],
"accept-encoding": [
"gzip, deflate, br"
]
},
"isBase64Encoded": false
}
Still same error :-
START RequestId: 028d4942-f2cf-4dbc-afe3-08783a106555 Version: $LATEST
argument "content" is null: java.lang.IllegalArgumentException
java.lang.IllegalArgumentException: argument "content" is null
at com.fasterxml.jackson.databind.ObjectMapper._assertNotNull(ObjectMapper.java:4757)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3515)
at com.aditya.learn.function.CreateOrderLambda.createOrder(CreateOrderLambda.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
END RequestId: 028d4942-f2cf-4dbc-afe3-08783a106555
REPORT RequestId: 028d4942-f2cf-4dbc-afe3-08783a106555 Duration: 371.97 ms Billed Duration: 372 ms Memory Size: 512 MB Max Memory Used: 134 MB Init Duration: 2568.48 ms
amazon-web-services">
amazon-web-servicesaws-lambdaamazon-cloudformation">
amazon-cloudformationaws-api-gatewayaws-sam-cli
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|


