本地启动API时未设置AWS SAM APIGatewayProxyRequestEvent HttpMethod



我创建了一个带有AWS::SERVERLESS::FUNCTION的应用程序,该应用程序附带了一个HttpApi事件。我认为为每个资源创建一个lambda是个好主意,因此,例如Post、Get和Put-on/customer都由单个lambda处理,该lambda决定使用执行哪个操作

switch (input.getHttpMethod()) {
case "GET": ...
case "POST: ...
}

现在我的问题来了:当使用sam local start-api启动应用程序时,我的lambda会被正确调用,但input.getHttpMethod()input.getRequestContext().getHttpMethod()都没有设置。

鉴于SAM支持多个HttpApi事件,在本地运行应用程序时未能提供http方法几乎完全缓解了本地开发。我是做错了什么,还是这真的不起作用?我使用的是Java btw,我不知道在使用其他语言时是否也存在这个问题。

以防万一:是我的";每个资源一个lambda";方法错误,是否每个操作都有自己的lambda?

我发现了问题。HttpApi使用";PayloadFormatVersion:2.0";默认情况下。input的类型是com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent,但这表示格式1.0,我必须使用com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent才能使其工作。由于实例只是根据json输入构建的,并且两个类中的几个字段是相同的,因此这种方法会悄无声息地失败。

相关内容

  • 没有找到相关文章

最新更新