是否可以将所有阶段变量添加到嵌套JSON结构中的主体映射模板中?
我使用的是API网关,有一个将数据传递给Step函数的服务 Steps函数需要以下格式的JSON输入:是否可以将所有阶段变量添加到嵌套JSON结构中的主体映射模板中?,json,amazon-web-services,aws-api-gateway,vtl,Json,Amazon Web Services,Aws Api Gateway,Vtl,我使用的是API网关,有一个将数据传递给Step函数的服务 Steps函数需要以下格式的JSON输入: { "input":"", "stateMachineArn": "arn:aws:states:eu-west-1:xxxxxxxxxxxx:stateMachine:StateMachine-1" } 我目前正在以手动方式传递阶段变量,即 #set($data = $util.escapeJavaScript($input.json('$'))) { "in
{
"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"
}
我知道,在默认映射模板中,您可以使用类似这样的方法循环遍历stage变量并生成JSON:
"stage-variables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
#if($foreach.hasNext),#end
#end
}
但是,Step函数所需的JSON略有不同。如何将所有阶段变量转换为JSON格式,而不必手动显式添加每个阶段变量
谢谢我认为这应该有效,但我没有测试它。我只是复制了您在那里的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"
}
下面是有效的解决方案。似乎模板对换行符非常敏感,请注意下面的代码总共由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"
}
感谢您的回复@JackKohn,请参阅我发布的问题的答案。亲切的问候。