4

我正在为 AWS API 网关创建一个请求映射模板。在该模板中,我想根据某些条件自定义请求参数并应用运算符。

 #foreach($header in $input.params().header.keySet())
     #if($header=="id")#set($idVal = 
     $util.escapeJavaScript($input.params().header.get($header)))
         #if($idVal.matches("^[0-9a-f]{4}-[0-9A-Z]{3}$"))
             "$header":"$idVal"
         #else
           #set($random = UUID.randomUUID())
          "$header":"$random"
         #end
     #else

例如,在上面的模板中基于 if 条件我想生成 randomUUID 并添加到 header 中。但是当我测试时, id 值设置为空字符串。

如何在速度模板映射 API 网关中使用包和 Java 函数支持?另外,请分享对格式正确的模板的任何参考,了解更多信息将非常有用。

4

2 回答 2

8

API Gateway 中使用的 VTL 不能使用您自己的包进行扩展。只能使用内置变量和$util函数

您可能会发现它$context.requestId包含一个适合您的目的的 UUID,对于每个请求都是唯一的。请注意,如果您使用的是 Lambda 集成,则此值与 Lambda 不同,context.requestId后者只是巧合地具有相同的名称。

或者,最右边的 33 个字符$context.xrayTraceId应该包含一个 4 字节时间戳(8 个十六进制数字)+“-”+一个 96 位唯一值(24 个十六进制数字),您可以从中构造一个可使用的 UUID,并进行一些简单的字符串操作。

于 2019-03-11T06:23:43.837 回答
0

你不能使用包,但你可以使用$util 助手

例如,您可以使用它$util.autoId()来生成您的 UUID。

于 2022-01-25T17:35:37.053 回答