API 网关未检索到请求 body

API GATEWAY not retreiving request body

我正在尝试在 API 网关中创建 POST 端点,请求 body 类型为 application/json。现在,在输入 body 映射模板中,我想检查输入是否存在以及所需字段是否存在。我尝试使用 $input.body 获取输入 body,还尝试了 $input.json('$') 和 $input.path('$')。没有任何效果,输入 body 总是空的,尽管 $input.body == "" 检查总是 returns 错误。但在测试日志中,我可以看到 body 已通过。我正在使用 Mock 作为集成类型。什么是问题?

我发现这个问题的答案是,实际上当我们使用 AWS 提供的 MOCK 集成时无法访问响应正文,但我们仍然可以通过以下方式使用 hacky 方法访问正文: 首先,在集成请求映射模板中,您将正文存储在路径参数中。

#set($context.requestOverride.path.body = $input.body)
{
  "statusCode": 200,
}

然后,在集成响应映射模板中取回它并 return 它。

#set($body = $context.requestOverride.path.body)
{
  "statusCode": 200,
  "body": $body,
}

然后解析它:

$util.parseJson($body).varName