无法将请求正文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 

对于集成请求步骤中的映射模板,则应该按预期工作。