AWS API 网关只允许表单数据的第一个元素而忽略其余部分

AWS API Gateway only allows the first element of the form data and ignores the rest

我一直在尝试使用 AWS API 网关将数据推送到 AWS SQS,我发送的数据是 application/x-www-form-urlencoded.

的形式

它看起来有点像这样:

fruits[]: apple
fruits[]: mango
fruits[]: banana
season: summer

现在,当我从 AWS SQS 轮询数据时,我看到只有 fruits[]=apple 已存储,所有其他都被忽略。

这是我当前要推送到 SQS 的映射模板:

Action=SendMessage&MessageBody=$input.body

看起来它有多个 $input.body 但如果是这样的话,那么它就不可能捕获传入的随机数据。

我是 AWS API 网关的新手,在此先感谢。 :D

试试这个

要求:

POST apigateway/stage/resource?query=test
{
  "season": "summer",
  "list": [apple,mango,banana]
}

映射:

#set($inputRoot = $input.path('$'))
{
  "query": "$input.params('query')",
  "id": "$inputRoot.season",
  "list": $inputRoot.list
}

经过大量研究,我终于解开了这个谜团。

$input.body的值为:

fruits[]=apple&fruits[]=mango&fruits[]=banana&season=summer

现在只有 MessageBody 被推送到 SQS 中,所以根据我的模板,正在形成的结果查询字符串是:

Action=SendMessage&MessageBody=fruits[]=apple&fruits[]=mango&fruits[]=banana&season=summer

只有 fruits[]=apple 属于 MessageBody,所有其他成为单独的查询对象,因此被忽略。

我只需要将模板调整为:

Action=SendMessage&MessageBody=$util.urlEncode($input.body)

因此生成的查询字符串不再包含 &= 并且所有内容都属于 MessageBody

欢迎编辑