gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:12:37 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com