我有一个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>"
我该如何解决这个问题?
答案 0 :(得分:3)
论坛帖子很有用。还要注意您粘贴的字符串不是有效的XML,即使您设法通过映射返回它。
无论如何我遇到了类似的问题,这就是我解决的问题(非常类似于上面的论坛链接讨论)。
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字符串。
#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有效内容中。