amazon-web-services - 如何将 API Gateway API 中的路径参数映射到 Java Lambda 的请求对象

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

我有一个用 Java 编写的 lambda,它接受结构的请求对象

{
  "id": "be1c320a-144f-464d-b32c-38ec7fb4445b",
  "userId": "foobar"
}

当我通过带有这样一个对象的测试接口(interface)调用这个 Lambda 时,它工作正常。

我想创建一个 API,其中 GET请求
/users/foobar/items/be1c320a-144f-464d-b32c-38ec7fb4445b

即形式
/users/{userId}/items/{id}

称之为 Lambda。

我已经创建了 API 资源 /users , {userId} , items , 和 {id}适本地。

我创建了 GET方法(在 /users/{userId}/items/{id} 上)并将其与 lambda 关联。

当我测试 API 时,它会调用 lambda,但请求中有空值。我可以看到它包装了path{"id":"be1c320a-144f-464d-b32c-38ec7fb4445b","userId": "foobar"}在日志中,但这不是在正文中发送的。

我尝试过创建模板映射(并尝试过 RTFM),但看不到如何将路径参数映射到正文。

我如何实现这种映射?

最佳答案

我认为您的请求对象结构可能没有正确配置。可能有几种方法可以配置它。这是一些对我有帮助的信息。

How to pass a querystring or route parameter to AWS Lambda from Amazon API Gateway - 演示此映射(尽管使用 python)。然而,占据顶部response ,如果您启用“使用 Lambda 代理集成”,您可以类似地使用 Java 执行此操作,如下所示:

@Override
public Object handleRequest(APIGatewayProxyRequestEvent input, Context context) {

    Map<String, String> pathParameters = input.getPathParameters();
    String id = pathParameters.get("id");
    String userId = pathParameters.get("userId");

    // Handle rest of request..

}

这是 tuturial using the serverless framework使用 Java 创建 Api。本教程同样访问 pathParameters通过解析输入而不是使用 APIGatewayProxyRequestEvent java类。
@Override
public Object handleRequest(Map<String, Object> input, Context context) {

    try {
        // get the 'pathParameters' from input
        Map<String,String> pathParameters =  (Map<String,String>)input.get("pathParameters");
        String id = pathParameters.get("id");
        String userId = pathParameters.get("userId");

    } catch (Exception ex) {
        logger.error("Error in retrieving product: " + ex);

    }
}

关于amazon-web-services - 如何将 API Gateway API 中的路径参数映射到 Java Lambda 的请求对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55675629/

相关文章:

amazon-web-services - API Gateway 是否可以设置为金丝雀部署的粘性 session ?

javascript - 在 AWS Lambda 中使用 Async/Await 写入 S3 存储桶

javascript - 为什么 JavaScript aws-sdk ssm getParameter 需要所有参数的权限,而不是我需要的那个?

amazon-web-services - 处理来自 AWS Lambda 的 CSRF 攻击?

amazon-web-services - 通过 Cloudformation 使用函数 URL 部署 AWS Lambda

amazon-web-services - 将 CloudFront 分配与 Route 53 域相关联时出现问题

javascript - 如何在不通过服务器传递文件的情况下将文件上传到 amazon S3?

amazon-web-services - Api网关从step函数获取输出结果?

aws-api-gateway - 通过域名调用API网关

使用响应 302 从 aws api 网关重定向