我有一个用 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/