AWS API Gateway仅允许表单数据的第一个元素,而忽略其余元素

时间:2019-06-14 11:22:17

标签: amazon-web-services aws-api-gateway urlencode jsonpath

我一直在尝试使用AWS API Gateway将数据推送到AWS SQS,我发送的数据的格式为for i in 1:numPipes loop connect(ecoCeramicRadiation, module3_PipeComponents[i].port_a); ... end for; connect(ecoCeramicRadiation, topFrontExteriorConvection.solid);

它看起来像这样:

application/x-www-form-urlencoded

现在,当我从AWS SQS轮询数据时,我看到仅存储了fruits[]: apple fruits[]: mango fruits[]: banana season: summer ,而所有其他都被忽略了。

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

fruits[]=apple

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

我是AWS API Gateway的新手,谢谢。 :D

2 个答案:

答案 0 :(得分:0)

尝试

请求:

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
}

答案 1 :(得分:0)

经过大量研究和研究,我得以破译了这个谜。

$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

欢迎编辑