Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWS API网关请求主体作为函数的Java POJO_Java_Amazon Web Services_Aws Lambda_Serverless Framework - Fatal编程技术网

AWS API网关请求主体作为函数的Java POJO

AWS API网关请求主体作为函数的Java POJO,java,amazon-web-services,aws-lambda,serverless-framework,Java,Amazon Web Services,Aws Lambda,Serverless Framework,我在使用aws lambda、API网关和无服务器框架时遇到了一个非常基本的问题。我只是想将post请求的主体作为JavaPOJO提交 好的,下面是设置: POJO: 处理程序: public class PersonHandler implements RequestHandler<Person, ApiGatewayResponse> { @Override public ApiGatewayResponse handleRequest(lastNamePerso

我在使用aws lambda、API网关和无服务器框架时遇到了一个非常基本的问题。我只是想将post请求的主体作为JavaPOJO提交

好的,下面是设置:

POJO:

处理程序:

public class PersonHandler implements RequestHandler<Person, ApiGatewayResponse> {
    @Override
    public ApiGatewayResponse handleRequest(lastNamePerson person, Context context) {
        //... do something
     }
}
最后但并非最不重要的是serverless.yml

{
...
functions:person
handler:com.serverless.handler
event:
  -http:
    path:person
    method:post
...
}
看起来很直截了当,不是吗


不幸的是,事情并没有那么简单。调用函数时,Person POJO将始终为空。我们如何在AWS API Gateway&Lambda中将身体作为POJO提供?

好吧,通过长期的研究和猜测,我找到了答案,并决定将其发布在这里,供未来的我(和其他人)找到

首先,让我们来看看实际问题。身体将不在根中,而是在input.body下,然后Jackson不知道在哪里找到你的人

因此,首先我们需要从lambda代理集成更改为lambda集成

然后我们需要告诉集成将主体作为有效载荷移交给函数

这为我们提供了以下serverless.yml:

{
...
functions:person
handler:com.serverless.handler
event:
  -http:
    path:person
    method:post
    integration:lambda
    request:
      template:
        application/json:'$input.body'
...
}
瞧,现在你的POJO将被填充。 希望这能有所帮助,如果有人找到更简单或更好的解决方案,请告诉我

资料来源:

(用于格式化yml)

{
...
functions:person
handler:com.serverless.handler
event:
  -http:
    path:person
    method:post
...
}
{
...
functions:person
handler:com.serverless.handler
event:
  -http:
    path:person
    method:post
    integration:lambda
    request:
      template:
        application/json:'$input.body'
...
}