AWS API Gateway请求主体为Java POJO以实现功能

时间:2019-06-20 14:12:09

标签: java amazon-web-services aws-lambda serverless-framework

使用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?

1 个答案:

答案 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

Could not parse request body into json: Unexpected character (\'-\' (code 45)) AWS Lambda + API + Postman(用于格式化yml)