aws / aws/aws-lambda-java-libs

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

Abierto
#432 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Java
Estrellas
548
Forks
241
Merge medio
2 d 5 min
PR fusionados (30 d)
11

Descripción

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?

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.