Skip to content

EventLoader unable to correctly deserialize posted json body data for APIGateway events #432

Open
@bakerhaasis

Description

@bakerhaasis

Using aws-lambda-java-tests v 1.1.1 and attempting to write a unit test for my lambda function handler (integrated with API Gateway).

Here is a snippet from my junit test - attempting to load a test event to pass to the handler function:

APIGatewayV2HTTPEvent event = EventLoader.loadApiGatewayHttpEvent("events/broken.json");

//proceed to pass the event to the function handler

The contents of the file 'broken.json' are as follows :

{
  "version": "2.0",
  "headers": {
    "content-type":"application/json"
  },
  "requestContext": {
    "accountId": "123456789012",
    "apiId": "api-id"
    }
  ,
  "body": {
  	"firstName":"John",
  	"lastName":"Doe",
  	"nickName":"Jonny D"
  },
  "isBase64Encoded": false
}

All the documentation and examples I've found only use a string as the body, but this is a fairly common use case (an HTTP API accepting json data into a POST for updating information). From above, the body has a simple json object structure representing a person. Because the APIGatewayV2HTTPEvent defines the body as a string, the EventLoader fails with the following exception:

java.io.UncheckedIOException: com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_OBJECT token
 at [Source: (BufferedInputStream); line: 11, column: 11] (through reference chain: com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent["body"])

What am I missing here? Is this a deficiency in the EventLoader class, or am I attempting to test this behavior in the wrong way?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions