这是我的 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:
对于上述测试输入,lambda 函数按预期工作。
然后,我创建了一个 API 网关,其中包含触发上述 lambda 函数的 POST 请求:
然后,我使用 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 .
您有两个选择:
在 API Gateway 中创建自定义映射模板,将发送到 Lambda 的事件转换为您期望的事件。
修改您的 Lambda 代码以处理当前发送的格式。我建议使用this library .
关于java - AWS API Gateway POST 请求不适用于 Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73251281/