AWS API 网关请求正文作为函数的 Java POJO

AWS API Gateway request body as Java POJO for function

我在使用 aws-lambda、API 网关和无服务器框架时遇到了一个非常基本的问题。我只是想将 post 请求的主体作为 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
     }
}

并且 post 的请求正文中的有效负载将是

{
    "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?

好吧,通过长时间的研究和一些猜测,我找到了答案并决定post 把它放在这里,以供将来我(和其他人)找到。

但首先,让我们看一下实际问题。正文不会在root里而是在input.body下面,然后Jackson不知道去哪里找你的人

因此,首先我们需要将 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'
...
}

瞧瞧,现在您的 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)