我将Lambda与AWS Integration API网关配合使用,并且我具有数据映射模板。 带有查询的网址是
https://example.com/query?value1=val1&value1=val2&value1=val3
我正在尝试将所有这些参数传递给lambda,但没有运气-仅传递了最后一个值。这是数据映射模板的一部分。
"queryStringParameters": {
#foreach($queryParam in $input.params().querystring.keySet())
"$queryParam": "$util.escapeJavaScript($input.params().querystring.get($queryParam))" #if($foreach.hasNext),#end
#end
},
我知道在AWS代理集成中存在多值查询字符串参数,但是使用数据映射模板无法找到它们。 这是测试结果:
Method request query string: {value1=[val1,val2,val3]}
Endpoint request body after transformations: "queryStringParameters": {"value1": "val3"}
试图像#Veach一样在VTL中遍历该参数,但也没有运气
答案 0 :(得分:0)
具有值数组的正确语法应与以下格式匹配
https://example.com/query?value1[]=val1&value1[]=val2&value1[]=val3
答案 1 :(得分:0)
所以...我有两种方法,将我的参数发送为
&value1=[1,2,3]
或使用aws_proxy并从事件中访问此value1
multiValueQueryStringParameters
我选择了最后一个。
答案 2 :(得分:0)
经过大量的文档搜索和尝试后,我只是将其写在映射模板中(幸运...):
"multiValueQueryStringParameters": {
#foreach($key in $method.request.multivaluequerystring.keySet())
"$key" : [
#foreach($val in $method.request.multivaluequerystring.get($key))
"$val"#if($foreach.hasNext),#end
#end
]#if($foreach.hasNext),#end
#end
},
无需在方法和集成部分定义任何查询参数名称。