几天来,我一直在尝试获取从 AWS 中的 API 网关发送到 Lambda 函数的参数,但没有成功。
我决定从头开始,所以我按照他们的演练( http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html#getting-started-new-lambda )
我已经检查了这个演练两次,我已经按照信中的步骤进行操作。
问题
当我从 Postman 或在 Swift 中测试 API 时,我收到了错误:
{“消息”:“无法将请求正文解析为 json:数值中的意外字符(\’-\‘(代码 45)):预期数字 (0-9) 跟随减号,对于有效数值\n [来源:[B@c036d15;行:1,列:3]”}
在邮递员中,当我以 JSON 格式查看结果时,我得到了
坏字符串
Lambda 函数
该函数是演练中的基本示例:
console.log('Loading event');
exports.handler = function(event, context) {
var name = (event.name === undefined ? 'No-Name' : event.name);
console.log('"Hello":"' + name + '"');
context.done(null, {"Hello":name}); // SUCCESS with message
};
当从 Lambda 控制台进行测试并使用测试数据时,我得到了结果:
{
"Hello": "TestUser123"
}
从 API Gateway 测试中测试时,结果也是:
{
"Hello": "TestUser123"
}
谁能明白为什么两个测试控制台都允许这项工作,但是当使用 POSTMAN 测试或在 Swift 脚本中使用时它不起作用?
编辑 1
在邮递员中,我将内容类型设置为 application/json
该脚本返回默认值:
{
"Hello": "user"
}
但是,当我在 POSTMAN 中添加参数 名称 和 TestUser123 时,这是它返回错误的时候。
更新 1
好的,所以我将映射模板更改为在另一个答案中找到的模板:
{ "name": "$input.params('name')" }
现在结果是:
{
"Hello": ""
}
任何想法为什么它没有得到这个名字?
原文由 JamesG 发布,翻译遵循 CC BY-SA 4.0 许可协议
我今天刚遇到这个问题。
您的映射模板是:
AWS 使用 AWS Velocity 模板,其中;即使看起来像 JSON,也是不同的。
如果你使用
对于集成请求步骤中的映射模板,它应该按预期工作。