AWS API网关返回XML

时间:2017-06-11 15:09:44

标签: xml amazon-web-services xml-parsing aws-lambda aws-api-gateway

我有一个lambda函数,它将一个字符串(xml到字符串)返回给API网关。现在,API网关返回字符串,但它不是有效的XML。 我已经将内容类型设置为application / xml。

XML看起来像这样:

"<TEST xmlns:ns0=\"https://www.w3.org/2001/XMLSchema-instance\" version=\"3.0\" >\n  <InLine>\n  <tag1>valuetag1</tag1>\n</InLine>\n   \n</TEST>"

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

论坛帖子很有用。还要注意您粘贴的字符串不是有效的XML,即使您设法通过映射返回它。

无论如何我遇到了类似的问题,这就是我解决的问题(非常类似于上面的论坛链接讨论)。

  1. 确保您的Lambda返回可以转换为XML的内容。如果你的lambda在python中,你的处理程序可能是这样的:
  2. def lambda_handler(event, context): resp = {"body" : "<FooResult xmlns='http://someorg.com/xml/1.0'><Message>All is well</Message></FooResult>"} return resp

    请注意,我已将实际的响应XML字符串包装在json中。这个json元素的关键是&#34; body&#34;。并且该键的值是双引号内的有效XML字符串。

    1. 现在,在API网关的API响应中添加响应正文映射模板。这应该是模板的内容:
    2. #set($inputRoot = $input.path('$')) $inputRoot.body

      此模板将在键&#34; body&#34;中返回有效的XML值。在你的JSON中。

      现在,您只需在“方法响应”部分中添加Content-Type标头和application / xml的响应主体,您就应该获得有效的XML。

      请记住在客户端上设置accept标头以接受XML。干杯

答案 1 :(得分:2)

默认情况下,API Gateway和Lambda期望JSON数据。绝对可以返回XML数据,但根据您配置Lambda集成的方式,它将需要不同的配置。

如果您使用标准Lambda与映射模板集成,则注释中提到的forum thread将适用。如果您正在使用Lambda Proxy集成,则需要转义XML并将其嵌入到documentation中定义的返回JSON有效内容中。