2015-10-22 1 views
2

Похоже, что когда я отправляю тело с запросом POST, мое сопоставление шаблонов становится перезаписанным полезной нагрузкой.AWS API Gateway Overwriting Integration Request Mapping Template

У меня есть ресурс шлюза API, вызывающий функцию лямбда. Лямбда-функция проста, она просто отгоняет то, что она получает.

exports.handler = function(event, context) { 
    context.succeed({event: event}); 
}; 

Эта функция лямбда, называемая эхо, вызывает функцию Лямбды через POST. Метод POST имеет шаблон запроса интеграции отображения (который прямо из docs):

{ 
    "name" : "$input.params('name')", 
    "body" : $input.json('$') 
} 

Когда я делаю запрос БЕЗ тело я получаю обратно ответ я ожидаю:

curl -XPOST https://foo.execute-api.us-east-1.amazonaws.com/test/echo?name=foo 

{"event":{"name":"foo","body":{}} 

Однако, когда я делаю запрос с тело отображение шаблона больше не работает:

curl -XPOST https://foo.execute-api.us-east-1.amazonaws.com/test/echo?name=foo -d '{"text": "Say goodbye to your template mapping"}' 

{"event":{"text":"Say goodbye to your template mapping"} 

Как я могу обеспечить, чтобы мое сопоставление шаблонов применялось, когда тело присутствует в запросе?

ответ

3

Шаблоны сопоставления привязаны к запросу по типу содержимого запроса. В этом случае сопоставление шаблонов было для типа контента «application/json». Включив заголовок Content-Type: application/json в запросе, применяется шаблон сопоставления.

Это возвращает ожидаемый результат:

curl -XPOST https://qb9p3d1ovf.execute-api.us-east-1.amazonaws.com/test/echo?name=foo -H "Content-Type: application/json" -d '{"text": "Say goodbye to your template mapping"}' 

{"event":{"name":"foo","body":{"text":"Say HELLO to your template mapping"}} 
+0

Спасибо. Так. Многое. Шутки в сторону. –