api 网关的映射模板是否可以同时具有动态值和硬编码值

Can a mapping template for api gateway have both dynamic and hard coded values

我正在尝试将 API 网关请求映射到 lambda。 我使用的映射模板是

{
  "method": "$context.httpMethod",
  "body" : $input.json('$'),
  "headers": {
    #foreach($param in $input.params().header.keySet())
    "$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end

    #end
  },
  "queryParams": {
    #foreach($param in $input.params().querystring.keySet())
    "$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end

    #end
  },
  "pathParams": {
    #foreach($param in $input.params().path.keySet())
    "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end

    #end
  },
  "source_ip" : "$context.identity.sourceIp"
}

问题是我还想对用户不必传入的查询字符串参数进行硬编码(出于用户体验原因),但我的 lambda 是期望的。 我想做这样的事情

{
   “queryParams” : 
      “myrequiredkey” : “foo” }
}

}

但是,当我尝试组合这两个模板时,结果是我总是覆盖所有 queryParams 和 lambda 在其事件 {"queryParams": "foo"}} 中接收。但我也想发送任何其他查询参数。 有没有一种方法可以添加硬编码的查询参数并且覆盖所有动态映射的参数?

谢谢!

这个怎么样:

{
  "method": "$context.httpMethod",
  "body" : $input.json('$'),
  "headers": {
    #foreach($param in $input.params().header.keySet())
    "$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end
    #end
  },
  "queryParams": {
    #foreach($param in $input.params().querystring.keySet())
    "$param": "$util.escapeJavaScript($input.params().querystring.get($param))",
    #end
    "myrequiredkey":"foo"
  },
  "pathParams": {
    #foreach($param in $input.params().path.keySet())
    "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end
    #end
  },
  "source_ip" : "$context.identity.sourceIp"
}

我删除了 #if($foreach.hasNext),#end 并直接将您需要的参数放入您的对象中。