amazon-web-services - AWS API Gateway 部署的 API 无法解析请求正文
问题描述
我有一个与 API Gateway 集成的 Lambda 函数,并且堆栈被部署为云形成模板。当我尝试在 AWS Web 控制台中测试端点时,我得到了正确的响应,但是当我尝试调用 API 的部署版本时,我得到了那个错误。
"message": "Could not parse request body into json: Unrecognized token ....etc"
我在集成请求中尝试了这种映射{ "body" : $input.json('$') }
,但没有奏效。
这是我尝试使用 POSTMAN 发送的 JSON
{
"description": "test description",
"status": "test status"
}
并且请求具有标头:Content-Type: application/json
这是 POSTMAN 请求正文和标头的屏幕截图,以及来自 API 的响应:
任何解决方案的家伙?
更新:
我在集成请求级别放置了一个映射模板,如下所示:
{
"body-json" : $input.json('$')
}
并更新了 lambda 函数以记录即将到来的请求,然后发出 2 个请求:
第一个:来自 API Gateway 测试 Web 控制台:
我在 cloudwatch 日志中发现了以下内容:
INFO {
body: {
description: 'test',
projectId: 23,
action: 'test',
entity: 'test',
startDate: '01-01-2020',
endDate: '01-01-2020'
}
}
第二个:来自邮递员:
我在 cloudwatch 日志中发现了以下内容:
INFO {
body: 'ewogICAgImRlc2NyaXB0aW9uIjogInRlc3QiLAogICAgInByb2plY3RJZCI6IDIzLAogICAgImFjdGlvbiI6ICJ0ZXN0IiwKICAgICJlbnRpdHkiOiAidGVzdCIsCiAgICAic3RhcnREYXRlIjogIjAxLTAxLTIwMjAiLAogICAgImVuZERhdGUiOiAiMDEtMDEtMjAyMCIKfQ=='
}
这表明在使用 POSTMAN 发出请求的情况下,JSON 有效负载会自动进行字符串化。什么会导致这样的事情?以及如何处理?
解决方案
在这种情况下,我们需要编辑映射模板,因为我们没有使用代理集成。
"body-json" : $input.json('$')
//also if binary data type is enabled for your api your body will be a base64
//encoded string which could be decoded using
$util.base64Decode($input.json('$'))
二进制数据类型也可能默认启用,在 SAM 模板中搜索这些
x-amazon-apigateway-binary-media-types:
- '*/*'
推荐阅读
- java - 配置 MysqlConnectionPoolDataSource (Java) 时必须设置哪些配置属性?
- json - 使用任意键/值对将 JSON 解组为结构
- amazon-web-services - 如何提供对 AWS Web 控制台的有限访问?
- python-3.x - 如何删除或跳过文本文件中的行列表并在新文本文件中打印剩余的行?
- r - 从R中的向量列表中删除特定元素
- css - 如何将自定义样式设置为语义 ui 组件,reactjs
- javascript - 在 ReactJs 中将值从一个选项卡传递到另一个选项卡
- matlab - 如何使用 BreakPlot 函数避免箱线图出现不必要的空白?
- java - 通知操作意图未触发
- cassandra - 关于 Cassandra 关于键、分区的文档(草率,仍然令人困惑)