是否可以将所有阶段变量添加到嵌套 JSON 结构中的正文映射模板中?



我正在使用 API 网关,并且有一个将数据传递给 Step 函数的服务。

步骤函数需要以下格式的 JSON 输入:

{ 
"input":"", 
"stateMachineArn": "arn:aws:states:eu-west-1:xxxxxxxxxxxx:stateMachine:StateMachine-1"
}

我目前正在以手动方式传递阶段变量,即

#set($data = $util.escapeJavaScript($input.json('$')))
{ 
"input": "{ 
"input": $data, 
"stageVariables" : { 
"clientId": "${stageVariables.clientId}", 
"clientSecret": "${stageVariables.clientSecret}", 
"password": "${stageVariables.password}" },
"stateMachineArn": "arn:aws:states:eu-west-1:xxxxxxxxxxxx:stateMachine:StateMachine-1"
}

我知道在默认映射模板中,您可以使用这样的东西来循环访问阶段变量并生成 JSON:

"stage-variables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
#if($foreach.hasNext),#end
#end
}

但是,步进函数所需的 JSON 略有不同。如何将所有阶段变量转换为 JSON 格式,而无需手动显式添加每个变量?

谢谢

下面是有效的解决方案。似乎模板对换行符非常敏感,请注意下面的代码总共由 5 行组成。

#set($data = $util.escapeJavaScript($input.json('$')))
{
"input": "{ "input": $data, "stageVariables" : { #foreach($key in $stageVariables.keySet()) "$key" : "$util.escapeJavaScript($stageVariables.get($key))" #if($foreach.hasNext),#end #end } }",
"stateMachineArn": "arn:aws:states:eu-west-1:xxxxxxxxxxxx:stateMachine:StateMachine-1"
}

我认为这应该有效,但我没有测试它。我只是简单地复制了您那里的 foreach 块并内联转义了引号。

#set($data = $util.escapeJavaScript($input.json('$')))
{ 
"input": "{ 
"input": $data, 
"stageVariables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
#if($foreach.hasNext),#end
#end
},
"stateMachineArn": "arn:aws:states:eu-west-1:xxxxxxxxxxxx:stateMachine:StateMachine-1"
}

相关内容

  • 没有找到相关文章

最新更新