2015-07-11 37 views
10

使用亚马逊的API网关我可以创建一个端点来调用输出纯文本的lambda函数。但是,当我在端点上发出请求时,输出会返回默认内容类型“application/json”。这将输出用引号括起来的纯文本响应。我想将响应标题更改为“text/plain”,所以它只输出解开引号的文本。有谁知道如何做到这一点?从亚马逊API网关端点输出纯文本内容

+1

我设法改变内容类型,但不删除引号,任何消息? – Korri

+0

我还没有取得任何进展。我觉得亚马逊试图阻止你输出纯文本内容。看起来他们允许您从JSON转换为XML,这使我相信您可以转换为任何内容类型。我无法在他们的营销材料或文档中找到任何明确说明他们不希望您输出纯文本的内容,但我无法找到解决问题的方法。我的猜测是,他们试图阻止你尝试将其用作Web应用程序的完整托管平台。 –

+0

这个答案允许你基本上发回任何东西:http://stackoverflow.com/a/33614870/2300810 – zhywu

回答

26

所以我设法让这个工作。

在合并响应,你需要添加类型“text/plain的”

的一个新的映射模板在框中输入模板类型:

$input.path('$') 

或路径中的价值您想要返回并保存新的映射模板(请勿选择模型!)

然后,您需要重新部署API以使更改生效。

我已经有一件事了,方法响应也使用Empty模型设置为“text/plain”。我不确定这是否有效,但如果上述不起作用,只需将其添加进去即可。

+1

当试图返回XML时,这也很有用。我将映射模板设置为“application/xml”,在我的代码中,我有'context.succeed('');' - 不幸的是,提醒重新部署也是有帮助的。 – chandlervdw

+0

这可以节省我几个小时。应该是选择的答案。 –

1

Anthony的方式仍在输出字符串中留下引号。因此,回顾一下,在集成响应中,为text/plain类型创建一个新的映射模板。它应该有值:

$input.path('$') 

现在,如果你运行context.succeed("somestring"),输出会"somestring",用引号引用。这是因为它被串化为一个json术语。作为一个讨厌的解决方法,你可以这样做:

var base = JSON.stringify; 
JSON.stringify = function(given) { 
    JSON.stringify = base; 
    return given; 
} 
context.succeed("somestring"); 

作为一个侧面说明,您可以通过console.log(context.succeed)读书获得更多的提示。

+0

因此,我使用的方法是JSONPath,因此input.path('$')引用了JSON路径元素,但是您需要返回有效的JSON: {“value”:“something” } –