无法将请求正文解析为 json:意外字符(\\'-\\'(代码 45))AWS Lambda API Postman

新手上路,请多包涵

几天来,我一直在尝试获取从 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 许可协议

阅读 553
1 个回答

我今天刚遇到这个问题。

您的映射模板是:

 { "name": "$input.params('name')" }

AWS 使用 AWS Velocity 模板,其中;即使看起来像 JSON,也是不同的。

如果你使用

{ "name": $input.params('name') } // notice no quotes

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

原文由 Amresh Venugopal 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题