2015-10-22 68 views
2

看来,当我通过POST请求发送正文时,我的模板映射正被有效负载覆盖。AWS API网关覆盖集成请求映射模板

我有一个调用Lambda函数的API网关资源。 Lambda函数很简单,它只是回应接收到的内容。

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

这个名为echo的Lambda函数通过POST调用Lambda函数。 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":{}} 

但是,当我提出请求WITH身体模板映射不再起作用:

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

谢谢。所以。许多。认真。 –