首页 > 解决方案 > 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 进行测试的行为与实际部署的端点不同?

标签: amazon-web-servicesaws-lambdaaws-api-gateway

解决方案


正如预期的那样,这对我来说是一个糟糕的配置。事实证明,它application/json被设置为二进制媒体类型(在 下Settings -> Binary Media Types),这会自动在 Base64 中编码正文内容。

此外,映射模板也可以$input.json('$')代替使用。这将为 json 主体添加基本验证,并避免格式错误的 json 到达您的 lambda 函数。


推荐阅读