如何将多值查询字符串参数传递给API Gateway上的Lambda?

3

我正在使用与Lambda集成的AWS API网关,并且我有数据映射模板。带查询的URL如下:

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"}

尝试使用#foreach在VTL中遍历该参数,但也没有成功。

2个回答

6

经过大量文档搜索和尝试,我在映射模板中简单地编写了以下内容(幸运的是...):

    "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
    },

无需在方法和集成部分定义任何查询参数名称。

0

所以...我有两种方式,将我的参数发送为

&value1=[1,2,3]

或者使用aws_proxy并从事件中访问此value1

multiValueQueryStringParameters

我选择了最后一个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接