У меня проблема с использованием AWS API Gateway, где работают все мои комбинации входных данных, за исключением одного, где он выбрасывает другие переданные значения.

Вот мой шаблон ...

#set($greet = $input.params('greet'))
#set($name = $input.params('username'))
{
#if($greet != "")
    "greet": "$greet"
    #if($name != "")
    ,
    #end
#end
#if($name != "")
    "name": "$name"
#end
}

И мой URL-адрес: /user/{username}/say/{greet}

Когда я тестирую конечную точку и не отправляю ни приветствия, ни имени пользователя, она работает. Когда я отправляю приветствие, но без имени пользователя, это работает. Когда я отправляю и приветствие, и имя пользователя, это работает. (Под "работает" я имею в виду, что он передает значения моей лямбда-функции.)

Но по какой-то причине, когда я отправляю имя пользователя, но не приветствую, отображение полностью выкидывает имя пользователя и не отправляет его (действует так, как если бы $ name = ''). Он по-прежнему переходит в правую конечную точку, потому что выполняется правая лямбда-функция, отображение просто отправляет пустой объект вместо объекта только со свойством name.

Кто-нибудь может увидеть, что я сделал не так?

0
user3131512 24 Дек 2017 в 03:09

1 ответ

Лучший ответ

Ваше отображение в порядке, и так оно и есть. Я предполагаю, что конфигурацию вашего API-шлюза необходимо настроить для сценария пустого приветствия.

Если приветствие отсутствует, AWS выполняет не привязку метода за переменной, а родительский ресурс (в данном случае привязку метода / say). Таким образом, вам понадобятся два определения метода, одно с приветствием, а другое без. Оба могут быть одинаково настроены, поскольку ваш шаблон сопоставления поддерживает оба результата.

api resource structure

0
jens walter 24 Дек 2017 в 10:30