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>

希望对您有所帮助。