AWS API Gateway разрешает только первый элемент данных формы и игнорирует остальные - PullRequest
0 голосов
/ 14 июня 2019

Я пытался отправить данные в AWS SQS с помощью AWS API Gateway, данные, которые я отправляю, имеют вид 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 Gateway, заранее спасибо. : D

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

После долгих исследований и прочее я смог разгадать эту тайну.

значение $input.body равно:

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

Теперь в SQS помещается только MessageBody, поэтому, согласно моему шаблону, результирующая строка запроса, которая формировалась, была:

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

only fruits[]=apple попадает под MessageBody, а все остальные становятся отдельными объектами запроса и, следовательно, игнорируются.

Мне просто нужно настроить шаблон на:

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

Таким образом, результирующая строка запроса больше не включает & или =, и каждая вещь подпадает под MessageBody

Изменения приветствуются

0 голосов
/ 14 июня 2019

попробуйте

Запрос:

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
}
...