使用aws-lambda,API Gateway和无服务器框架只是一个真正的基本问题。我只想将发布请求的主体作为Java POJO移交。
好的,这是设置:
POJO:
public class Person {
private String lastName;
private string firstName;
... Setters and Getters omitted
}
处理程序:
public class PersonHandler implements RequestHandler<Person, ApiGatewayResponse> {
@Override
public ApiGatewayResponse handleRequest(lastNamePerson person, Context context) {
//... do something
}
}
帖子的请求正文中的有效载荷为
{
"lastName" : "John",
"firstName" : "Doe"
}
最后,但同样重要的是serverless.yml
{
...
functions:person
handler:com.serverless.handler
event:
-http:
path:person
method:post
...
}
嗯,看起来很简单,不是吗?
不幸的是,这不是那么简单。调用函数时,Person POJO始终为空。我们如何在AWS API Gateway&Lambda中将主体作为POJO?
答案 0 :(得分:0)
通过长时间的研究和一些猜测,我找到了答案,并决定将其发布在这里,以便将来我(和其他人)找到。
但首先,让我们看一下实际问题。身体不会在根中,而是在input.body下,然后杰克逊不知道在哪里可以找到你的人。
因此,首先我们需要从lambda-proxy-integration更改为lambda-integration。
然后我们需要告诉集成将主体作为有效载荷移交给函数。
这为我们提供了以下serverless.yml:
{
...
functions:person
handler:com.serverless.handler
event:
-http:
path:person
method:post
integration:lambda
request:
template:
application/json:'$input.body'
...
}
e voila,现在您的POJO将被填充。 希望这会有所帮助,并让我知道是否有人找到了一个更简单或更佳的解决方案。
来源:
https://serverless.com/framework/docs/providers/aws/events/apigateway/#request-templates