如何将路径参数从 API Gateway API 映射到 Java Lambda 的请求对象

Vih*_*ung 5 amazon-web-services aws-lambda aws-api-gateway

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

{
  "id": "be1c320a-144f-464d-b32c-38ec7fb4445b",
  "userId": "foobar"
}
Run Code Online (Sandbox Code Playgroud)

当我使用这样的对象通过测试接口调用这个 Lambda 时,它工作正常。

我想创建一个 API,其中一个GET请求

/users/foobar/items/be1c320a-144f-464d-b32c-38ec7fb4445b
Run Code Online (Sandbox Code Playgroud)

即形式

/users/{userId}/items/{id}
Run Code Online (Sandbox Code Playgroud)

称之为 Lambda。

我创建了API资源/users{userId}items,和{id}适当的。

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

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

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

我如何实现这种映射?

Vih*_*ung 0

使用映射模板。

首先,在“方法请求”部分中,您应该看到userIdid作为请求路径

然后,在集成请求中,不要选择代理集成。

然后在“映射模板”部分中,添加一个新的表单映射application/json模板

{
  "id"     : "$method.request.path.id",
  "userId" : "$method.request.path.user_id"
}
Run Code Online (Sandbox Code Playgroud)