还有其他问题涉及此错误,但他们正在寻找访问查询参数,这不是我的方案。
测试我的简单GET请求失败,并在测试控制台的errorMessage
字段中显示以下内容:
Can not deserialize instance of java.lang.String out of START_OBJECT token\n at [Source: lambdainternal.util.NativeMemoryAsInputStream@6bdf28bb; line: 1, column: 1
我的lambda函数是一个简单的Java类,它带有一个静态方法get
,它接受一个参数:来自路径参数的id。
例如,执行GET
到mysite.com/resource/1
应该将1
传递给我的静态类的get
方法。
我还没有为此设置映射,因为我没有映射请求正文。 API网关文档非常混乱,并且在其示例中也很清楚,涵盖了类似的场景。
如何将路径参数映射到我的lambda函数的参数?
答案 0 :(得分:1)
仅仅为了背景,Lambda函数没有任何"参数&#34 ;;一切都必须进入函数的请求有效负载。因此,在您的情况下,您需要在Integration上使用映射模板将传入的GET参数转换为可以提供给Lambda的JSON有效内容。
路径参数在与查询字符串参数相同的映射模板对象中可用,即$ input.params([name]),其中[name]是参数的名称。
所以你的模板看起来像这样:
Content-Type:application / json
模板:
{
"resourceId" : "$input.params('your_name_here')"
}
我将JSON值放在引号中,但如果值保证为数字,则可以删除它们。无论如何,把它放在引号中可能更安全。
Content-Type在这里实际上很重要,因为API Gateway将检查传入请求的Content-Type标头,以确定要使用的映射模板。通常在GET请求中没有Content-Type标头,因此API Gateway假定您需要' application / json'因此,如果您的模板映射到application / json以外的内容类型,它将无法按预期工作。
编辑:有关Lambda集成的更多背景信息