amazon-web-services - JSON 正文可以作为 JSON 对象而不是 AWS 网关中的字符串传递吗?
问题描述
我正在尝试在 AWS 网关上设置一个 Lambda 集成,以将 JSON 主体作为对象传递,而不将其转换为字符串(规范示例"body": "$input.json('$')"
)。我尝试了 和 的不同功能$input
,$utils
以及它们的组合。到目前为止,我从我所期望的行为中得到的最接近的是使用以下映射模板:
{
"httpMethod": "POST",
"body": $input.body
}
当我从 AWS Web UI 进行测试时它工作正常,但一旦从外部部署和测试 API 就会失败。它失败是因为$input.body
作为 base64 而不是 JSON 对象传递。
是否可以使用上面的模板将主体作为 JSON 对象绕过到 AWS lambda?为什么从 AWS Web UI 进行测试的行为与实际部署的端点不同?
解决方案
正如预期的那样,这对我来说是一个糟糕的配置。事实证明,它application/json
被设置为二进制媒体类型(在 下Settings -> Binary Media Types
),这会自动在 Base64 中编码正文内容。
此外,映射模板也可以$input.json('$')
代替使用。这将为 json 主体添加基本验证,并避免格式错误的 json 到达您的 lambda 函数。
推荐阅读
- python - 如何使用python中的where子句从firestore中的数组中删除元素
- laravel - 如果验证码不是来自请求,我应该把它放在哪里?
- c# - 如何在 JetBrains Rider 中允许不安全的代码?
- amazon-web-services - AWS TCO 计算器是否不再活动?
- android - 如果 APK SHA 与 Firebase 控制台中的 SHA 不匹配,是否阻止 Firebase 数据库(或 Auth)运行?
- apache-spark - 将列表作为参数传递给 udf pyspark
- docker - 是否可以从容器/图像创建 Dockerfile?
- python - Plotly:如何根据条件为两条线之间的填充着色?
- java - Java 中的 InterruptedException 是什么?
- mql4 - 获得“找到空的受控语句”警告 | 元编辑器