8

我似乎无法弄清楚如何使用资源的集成请求中的映射模板创建可选的查询字符串参数。

我的模板如下所示:

{ "limit": "$input.params('limit')", "post_date":"$input.params('post_date')" } 

我希望 'limit' 和 'post_date' 是可选的。当未提供这些参数时,此模板会创建一个如下所示的查询字符串:

/myresource?limit=undefined&

当我期待时:

 /myresource

文档似乎没有涵盖这一点。我在文档中找到了一些示例模板,它们使用类似 bash 的语法来提供条件功能。我已尝试测试以下内容,但它不会在 AWS 控制台中验证:

        #set($limit = $input.path('limit'))
        { 
          #if($limit)"limit": "$input.params('limit')",#end
        } 

我在正确的轨道上吗?

谢谢!

4

2 回答 2

7

是的,您绝对可以在 Api Gateway 中执行此操作;虽然它似乎没有很好的记录!

在您的问题中,您提到这是一个参数;但是您使用了 input.path,它通常会引用 POST 请求正文中的元素。以下应该有效:

#set($limit = $input.params('limit'))
{
#if($limit && $limit.length() != 0)
"limit": "$input.params('limit')"
#end
}

在文档方面,我发现 AWS 的以下页面实际上非常有用。不过,它隐藏在关于模拟端点的部分中:

http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-mock-integration.html

于 2016-11-30T13:59:42.860 回答
0

想要做出贡献,因为 Tom Kerswill 的回答对我不起作用。

我一直遇到一个问题,如果我定义了一个可选参数并且没有使用它,我会在调用 API 时得到一个 JSON 解析异常。

我是如何让我的工作的:

#set($hasOptional = $input.params("optionalParam") != "")
{
    "requiredParam1": $input.params("requiredParam1"),
    "requiredParam2": $input.params("requiredParam2"),
    #if(!$hasOptional )
    "optionalParam": null
    #end
    #if($hasOptional )
    "optionalParam": $input.params("optionalParam")
    #end
}

仅使用第二个“if”语句运行不起作用,如果可选参数不存在,我必须将其显式设置为 null。

还要注意引号的使用,在整个 $input 周围加上引号......从来没有为我工作过。例如

"$input.params('limit')"

我必须完全像这样写出来:

"requiredParam1": $input.params("requiredParam1")

希望这可以帮助另一个沮丧的 AWS API Gateway 用户。

于 2021-08-27T12:15:56.877 回答