如何在集成请求 (AWS APIGateway) 中取消转义请求路径

Sha*_*awn 5 json amazon-web-services aws-lambda aws-api-gateway

我正在用 Swift 3 编写一个移动应用程序,并使用 AWS APIGateway、Lambda 和 RDS。在 POST 方法中,我在正文的元素之一中传递唯一标识符,例如:

us-east-1:xxxxxxxx-55b0-4917-82e3-85b3b093fa9c

但是,在 GET 方法中,我使用请求路径来检索此用户记录并传递此值。但是,我猜测它正在被编码,因为它是请求路径并导致:

us-east-1%3Axxxxxxxx-55b0-4917-82e3-85b3b093fa9c

一旦以这种方式到达 Lambda(以及我的 RDS),由于冒号的逃逸,它将找不到记录。因此,我可以在集成请求模板中“取消转义”该值吗?

我尝试过一个模板,例如:

#set($inputRoot = $input.path('$'))
{
    "user_identity" : "$util.decodeURIComponent($input.params('useridentity'))"
}
Run Code Online (Sandbox Code Playgroud)

然而,这是行不通的。我在日志中收到以下内容:

Thu Aug 17 02:32:47 UTC 2017 : HTTP Method: GET, Resource Path: /user/us-east-1%3Axxxxxxxx-55b0-4917-82e3-85b3b093fa9c
Thu Aug 17 02:32:47 UTC 2017 : Endpoint request body after transformations: {
   "user_identity" : ""
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用decodeURI,但这给了我相同的结果。我在这里缺少什么?

Sha*_*awn 7

当当!在我发布这篇文章几分钟后,我确实找到了答案。这是解决方案:

#set($inputRoot = $input.path('$'))
{
    "user_identity" : "$util.urlDecode($input.params('useridentity'))"
}
Run Code Online (Sandbox Code Playgroud)

urlDecode 函数就达到了目的。我希望这对其他人有帮助!