我已经尝试了几天从 AWS 中的 API 网关发送到 Lambda 函数的参数,但我没有成功。
我决定从头开始,所以我按照他们的演练(http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html#getting-started-new-lambda)
我已检查过此演练两次,并且已按照信函中的步骤进行操作。
问题
当我从 Postman 或在 Swift 中测试 API 时,我收到了错误:
{"message": "Could not parse request body into json: Unexpected character (\'-\' (code 45)) in numeric value: expected digit (0-9) to follow minus sign, for valid numeric value\n at [Source: [B@c036d15; line: 1, column: 3]"}
在 postman 中,当我以 JSON 格式查看结果时,我得到了
Bad String
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
在 postman 中,我将内容类型设置为 application/json
脚本返回默认值:
{
"Hello": "user"
}
但是,当我在 POSTMAN 中添加参数 name 和 TestUser123 时,它会返回错误。
更新 1
好的,所以我将映射模板更改为在另一个答案中找到的模板:
{ "name": "$input.params('name')" }
现在结果是:
{
"Hello": ""
}
任何想法为什么它没有得到这个名字?
最佳答案
我今天刚被这个卡住了。
您的映射模板是:
{ "name": "$input.params('name')" }
AWS 使用 AWS Velocity 模板,该模板;即使看起来像 JSON,也是不同的。
如果你使用
{ "name": $input.params('name') } // notice no quotes
对于集成请求步骤中的映射模板,它应该可以按预期工作。
关于json - 无法将请求正文解析为 json : Unexpected character (\'-\' (code 45)) AWS Lambda + API + Postman,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36210087/