AWS API Gateway映射模板返回POST请求体为空如何解决?
问题根因
$method.request.body变量仅允许在集成请求的映射模板中调用,你在响应映射模板中直接使用该变量无法读取到请求体内容,因此返回空值。- 你当前使用的映射模板存在JSON语法错误:
queryStrings下嵌套了两个独立的对象,不符合JSON结构规范。
修复步骤
- 先在集成请求的映射模板中新增如下逻辑,将请求体暂存到API Gateway上下文变量中(上下文变量支持在响应阶段读取):
#set($context.request_body = $util.escapeJavaScript($method.request.body).replaceAll("\\'","'"))
如果使用的是代理集成,也可以在方法请求的「HTTP请求头」配置中新增自定义头,将请求体赋值给自定义头传递到后端,再在响应阶段从后端返回的头中读取,非代理集成直接用上面的模板赋值即可。
- 修改响应阶段的映射模板,替换请求体读取变量,同时修正JSON语法,最终模板如下:
{ "queryStrings": { "MessageGroupId": $method.request.querystring.MessageGroupId, "MessageDeduplicationId": $method.request.querystring.MessageDeduplicationId }, "body": $context.request_body }
验证
重新发送测试请求即可看到body字段正常返回你提交的JSON内容:
{ "queryStrings": { "MessageGroupId": 1, "MessageDeduplicationId": 1 }, "body": { "data": "mgr" } }
内容的提问来源于stack exchange,提问作者Marcelo Gazzola
相关产品推荐
相关产品推荐

