AWS API 网关返回 XML

Pol*_*lle 6 xml amazon-web-services xml-parsing aws-lambda aws-api-gateway

我有一个 lambda 函数,它向 API 网关返回一个字符串(xml 到字符串)。现在 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>"
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

小智 7

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

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

  1. 确保您的 Lambda 返回可以转换为 XML 的内容。如果你的 lambda 是在 python 中,你的处理程序可能是这样的:

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 元素的关键是“body”。该键的值是双引号内的有效 XML 字符串。

  1. 现在,在 API Gateway 中为您的 API 的集成响应中添加响应正文映射模板。这应该是模板的内容:

#set($inputRoot = $input.path('$')) $inputRoot.body

此模板将在 JSON 的键“body”中返回有效的 XML 值。

现在您只需要在 Method Response 部分添加一个 Content-Type 标头和 application/xml 的响应主体,您应该会获得有效的 XML。

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


Bob*_*ney 2

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

如果您使用标准 Lambda 与映射模板集成,则评论中提到的论坛主题将适用如果您使用 Lambda 代理集成,则需要转义 XML 并将其嵌入到返回的 JSON 有效负载中,如文档中所定义