调用 AWS Lambda Java 函数的 AWS 网关收到空正文
Posted
技术标签:
【中文标题】调用 AWS Lambda Java 函数的 AWS 网关收到空正文【英文标题】:AWS Gateway calling AWS Lambda Java Function receives null body 【发布时间】:2020-09-20 19:24:17 【问题描述】:我正在使用 aws-lambda-java-events 库实现一个用 java 编码的 aws lambda 函数。出于故障排除的目的,我现在只是尝试使用相同的请求正文进行回复
public class LambdaFunctionHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent>
@Override
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context)
return new APIGatewayProxyResponseEvent().withBody(input.getBody());
我已经定义了上面的 lambda 函数和一个 api 网关,但我得到了 input.getBody
为空。 lambda函数的输出是一个空的json对象
我通过 AWS lambda 测试控制台对此进行了测试。执行成功,输出如上。 api 网关集成请求配置为在 POST 方法上调用上述 lambda 函数。
以下是我的疑问
-
如何获取 aws 测试事件 json 作为
APIGatewayProxyRequestEvent getBody()
字符串的一部分?
如何将请求正文传递给APIGatewayProxyRequestEvent getBody()
字符串变量中的API Gateway POST 方法?我需要定义映射模板吗?如果是这样,它应该是什么样子(我多次尝试但没有成功)
我想通过POSTMAN传递给API网关POST方法的请求体是
"question":"Hello, how are you doing?"
谢谢!
【问题讨论】:
你是如何测试它的?我猜你是从 lambda 控制台测试它作为一个正常事件。对吗? 是的,我刚刚意识到我需要使用网关代理事件来测试它。 【参考方案1】:我也试过了。我使用的代码是
public class LambdaFunctionHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent>
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent apiGatewayProxyRequestEvent,
Context context)
return new APIGatewayProxyResponseEvent().withBody(apiGatewayProxyRequestEvent.getBody());
我猜您是直接从 AWS 控制台进行测试。您不能直接测试事件触发的 lambda。
您必须使用“Amazon API Gateway 代理”事件创建测试,如下所示。
并将请求正文作为参数的一部分传递。
有了这些输入,我得到了预期的输出。
【讨论】:
感谢您将我的注意力转移到网关代理事件上。如何修改 json 以指定自定义请求正文?我需要创建一个 api 网关并在此处指定它的详细信息吗? 当您提到自定义请求正文时,您的意思是说响应需要完全按照您在问题中提到的方式吗?如果是这样,您可以传递 body 属性的值,如下所示。 "body": "'question':'你好,你好吗?'",我得到的请求输出是 "body": "'question':'你好,你好吗?' " 这能回答你的问题吗?以上是关于调用 AWS Lambda Java 函数的 AWS 网关收到空正文的主要内容,如果未能解决你的问题,请参考以下文章
使用 AWS SDK for Java 调用 AWS Lambda 函数时如何检索 context.done() 消息?