AWS API 网关:将响应转换为 XML
AWS API Gateway : Convert response to XML
我从 lambda 后端获取一个字符串值(xml 到字符串),它应该以 application/xml 格式返回给最终用户。我怎样才能做到这一点?
您可以指定 returns XML 的集成响应,以及映射模板以使用从 Lambda 返回的对象来格式化 XML。
我认为没有默认格式转换为 XML。一个简单的映射模板可能是这样的:
#set($root = $input.path('$'))
<stuff>
<message>$root.message</message>
<sourceIp>$context.identity.sourceIp</sourceIp>
<outputs>
#foreach($key in $root.keySet())
<output>
<key>$key</key>
<value>$root.get($key)</value>
</output>
#end
</outputs>
</stuff>
参考 this document 部分 "Accessing the $util Variable",通过简单的 JSON 到 XML 转换解决了挑战。我确实尝试了这里早些时候给出的映射模板,但它对我不起作用。
在我的例子中,我的 JSON 响应负载的形式是:
[
{
"key1": "val1",
"key2": "val2",
"key3": "val3"
},
{
"key1": "val1",
"key2": "val2",
"key3": "val3",
"key4": "val4"
}
]
这是处理它的映射模板:
#set ($arr = $util.parseJson($input.path('$')))
<responses>
#foreach($c in $arr)
<response>
#foreach ($k in $c.keySet())
<$k>$c.get($k)</$k>#end
</response>
#end
</responses>
关键是 parseJson 得到一个真实的 JSON/Java object。之后就一帆风顺了。
输出的形式为:
<responses>
<response>
<key1>val1</key1>
...
</response>
...
</responses>
希望对您有所帮助。
我从 lambda 后端获取一个字符串值(xml 到字符串),它应该以 application/xml 格式返回给最终用户。我怎样才能做到这一点?
您可以指定 returns XML 的集成响应,以及映射模板以使用从 Lambda 返回的对象来格式化 XML。
我认为没有默认格式转换为 XML。一个简单的映射模板可能是这样的:
#set($root = $input.path('$'))
<stuff>
<message>$root.message</message>
<sourceIp>$context.identity.sourceIp</sourceIp>
<outputs>
#foreach($key in $root.keySet())
<output>
<key>$key</key>
<value>$root.get($key)</value>
</output>
#end
</outputs>
</stuff>
参考 this document 部分 "Accessing the $util Variable",通过简单的 JSON 到 XML 转换解决了挑战。我确实尝试了这里早些时候给出的映射模板,但它对我不起作用。
在我的例子中,我的 JSON 响应负载的形式是:
[
{
"key1": "val1",
"key2": "val2",
"key3": "val3"
},
{
"key1": "val1",
"key2": "val2",
"key3": "val3",
"key4": "val4"
}
]
这是处理它的映射模板:
#set ($arr = $util.parseJson($input.path('$')))
<responses>
#foreach($c in $arr)
<response>
#foreach ($k in $c.keySet())
<$k>$c.get($k)</$k>#end
</response>
#end
</responses>
关键是 parseJson 得到一个真实的 JSON/Java object。之后就一帆风顺了。
输出的形式为:
<responses>
<response>
<key1>val1</key1>
...
</response>
...
</responses>
希望对您有所帮助。