AWS API 网关覆盖集成请求映射模板
AWS API Gateway Overwriting Integration Request Mapping Template
当我发送带有 POST 请求的正文时,我的模板映射似乎被有效负载覆盖了。
我有一个调用 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('$')
}
当我发出请求 WITHOUT 一个主体时,我得到了我期望的响应:
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"}
当请求中存在正文时,如何确保我的模板映射适用?
映射模板根据请求的内容类型绑定到请求。在本例中,模板映射用于内容类型 'application/json'。通过在请求中包含 Content-Type: application/json
header,应用映射模板。
这returns预期的结果:
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"}}
当我发送带有 POST 请求的正文时,我的模板映射似乎被有效负载覆盖了。
我有一个调用 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('$')
}
当我发出请求 WITHOUT 一个主体时,我得到了我期望的响应:
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"}
当请求中存在正文时,如何确保我的模板映射适用?
映射模板根据请求的内容类型绑定到请求。在本例中,模板映射用于内容类型 'application/json'。通过在请求中包含 Content-Type: application/json
header,应用映射模板。
这returns预期的结果:
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"}}