Предполагая, что маршрут, как это определено в API шлюза:Как сопоставить параметр пути, который не находится в конце пути, используя шаблон сопоставления при использовании AWS API Gateway с AWS Lambda?
POST /projects/{projectid}/key
, который отображается на AWS Lambda,
как бы один получить, что {projectid}
значение в обработчике лямбда (т.е. как поле входного объекта, являющегося пользовательским классом Java)?
Насколько я понял, что-то, как это должно сделать работу: В определении API шлюза интеграции Запрос> Шаблон Mapping я добавил следующее для типа контента «приложения/JSON»:
{ "projectid": "$input.params('projectid')" }
Однако, даже если часть после двоеточия ($input.params('projectid)
, кажется, снимаемого правильно (в API журналов шлюза из CloudWatch значение выглядит, как и ожидалось), отображение не работает:. null
значение достигает бэкенд
Обратите внимание, что аналогичный подход для маршрута например
GET /projects/{id}
работает, как и ожидалось, с аналогичным отображением.
Похоже, что параметр path только отображается, если он последний в пути?
Возможно, это только опечатка с вашей стороны, но правило шаблона сопоставления должно быть '' {"projectid": "$ input.params ('project-id')"} ''. Это должно вывести значение, связанное с '' project-id'', независимо от того, где оно находится на пути. – garnaat
извините, это действительно опечатка, но только в вопросе, а не в коде/config - это projectid всюду – Ogg
Хм, я не уверен, в чем проблема. Я часто использовал переменные с пути ресурса, а затем вытащил их, используя шаблоны. Кажется, не имеет значения, где они появляются на пути. Иногда у меня даже есть несколько переменных в одном пути. Я всегда мог получить к ним доступ через механизм '' $ input.params() '. – garnaat