java - AWS API Gateway POST 请求不适用于 Lambda 函数

标签 java json amazon-web-services aws-lambda aws-api-gateway

这是我的 lambda 函数:

@Override
    public List<JobData> handleRequest(Map<String,String> searchFilters, Context context) {
        List<JobData> jobs = new ArrayList<>();
        if(searchFilters.get("job_title") != null){
           // populate jobs list using a method.
        }else{
          // populate jobs list using another method.
        }
        return jobs;      
    }

我使用以下测试事件来测试 lambda:

enter image description here

对于上述测试输入,lambda 函数按预期工作。

enter image description here

然后,我创建了一个 API 网关,其中包含触发上述 lambda 函数的 POST 请求:

enter image description here

然后,我使用 REST API 网关发送一个 POST 请求,该请求的正文内容如下, header 为 Content-Type : application/json

请求正文:

{
  "job_title": "software engineer"
}

但它导航到 lambda 代码中的 else block (表明 API 网关未正确拦截 POST 请求参数),这是不符合预期的。

我尝试了 AWS 中 API 网关配置的排列和组合。但它们都不起作用。我感觉我的 lambda 函数可能需要更改才能与 API 网关一起使用。接下来我可以尝试什么?

最佳答案

默认情况下,POST 请求不会作为 event 对象直接发送到 Lambda。 event 对象中的内容将比测试用例中的内容多得多,并且实际的 POST 数据将位于事件对象的属性之一中。如果您在 API Gateway 中使用 Lambda 代理集成,则该事件将类似于 this .

您有两个选择:

  1. 在 API Gateway 中创建自定义映射模板,将发送到 Lambda 的事件转换为您期望的事件。

  2. 修改您的 Lambda 代码以处理当前发送的格式。我建议使用this library .

关于java - AWS API Gateway POST 请求不适用于 Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73251281/

相关文章:

java - Spring无法获取映射

java - 使用 Gremlin GraphFactory 连接到 AWS Neptune

javascript - 如何更改以下代码以不使用 eval?

java - 在 Jackson 中将对象序列化为 JSON,无需根 key

java图像裁剪

java - 强制扩展类设置多个值的简单方法

objective-c - 通过 objective c 在 amazon s3 上上传文件

amazon-web-services - aws cli 得到错误 "The security token included in the request is invalid"

php - 将用户的 id 放入开放类中

node.js - AWS API 网关 : Execution failed due to configuration error: Invalid JSON in response