无法将请求正文parsing为json:意外字符(\' – \'(code 45))AWS Lambda + API + Postman
我一直在尝试几天,以获取从AWS的API网关发送到Lambda函数的参数,我没有成功。
我决定从头开始,所以我跟着他们的演练( http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html#getting-started-new- lambda )
我已经检查过这个演练两次,我已经按照这封信的步骤。
问题
当我从Postman或SwifttestingAPI时,出现错误:
{“message”:“无法将请求正文parsing为json:数字值中的意外字符(\' – \'(code 45)):期望的数字(0-9)跟随减号,对于有效的数字值\ n at [来源:[B @ c036d15; line:1,column:3]“}
在邮递员,当我看到结果为JSON我刚刚得到
坏string
Lambda函数
该function是演练的基本示例:
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控制台和testing数据进行testing时,我得到结果:
{ "Hello": "TestUser123" }
从API网关testing进行testing时,结果也是:
{ "Hello": "TestUser123" }
任何人都可以看到为什么两个testing控制台都允许这项工作,但是当用POSTMANtesting或在一个Swift脚本中使用它不起作用?
编辑1
在postman中,我已经将content-type设置为application / json
该脚本返回默认值:
{ "Hello": "user" }
但是,当我在POSTMAN中添加参数名称和TestUser123时,这是当它返回错误。
更新1
好的,所以我将映射模板更改为我在另一个答案中find的模板:
{ "name": "$input.params('name')" }
现在的结果是:
{ "Hello": "" }
任何想法,为什么它没有得到这个名字?
我今天只是被困住了。
你的映射模板是:
{ "name": "$input.params('name')" }
AWS使用AWS Velocity模板, 即使看起来像JSON,也是不同的。
如果你使用
{ "name": $input.params('name') } // notice no quotes
对于集成请求步骤中的映射模板,则应该按预期工作。