我从不支持JSON(Mailgun)的服务处理HTTP POST。如果我为POST创建AWS API GW并将其传递给AWS Lambda函数,则数据必须是JSON。除了尝试将POST序列化为JSON(我不愿意)之外,是否有人知道是否是这种情况?
答案 0 :(得分:2)
我在这里找到了解决方案,对我有用。
https://forums.aws.amazon.com/thread.jspa?messageID=673012&tstart=0#673012
以下内容来自原帖,以获得完整答案。
分步说明如下:
- 亚马逊API网关 - >点击"创建API"。
- API名称=" myTestAPI",从API克隆=不要从现有API克隆,说明="测试"
- 点击"创建API"。
- 点击"创建资源"。
- 资源名称=" myTestInput",资源路径=" mytestinput"。
- 点击"创建资源"。
- 点击"创建方法"。
- 选择" POST"或" GET"根据需要点击勾选。
- 集成类型=" Lambda函数",根据需要选择区域,根据操作/存储表单数据编写代码。
- 点击"保存",点击"确定"授予许可。
- 点击"整合请求"。
- 点击"映射模板"。
- 点击"添加地图模板"。
- 内容类型是" application / x-www-form-urlencoded"然后点击勾选。
- 点击" application / x-www-form-urlencoded"。
- 点击"输入直通"。
旁边的铅笔图标- 选择"制图模板"。
- 将以下内容粘贴到“模板”框中:
醇>
-
## convert HTML POST data or HTTP GET query string to JSON ## get the raw post data from the AWS built-in variable and give it a nicer name #if ($context.httpMethod == "POST") #set($rawAPIData = $input.path('$')) #elseif ($context.httpMethod == "GET") #set($rawAPIData = $input.params().querystring) #set($rawAPIData = $rawAPIData.toString()) #set($rawAPIDataLength = $rawAPIData.length() - 1) #set($rawAPIData = $rawAPIData.substring(1, $rawAPIDataLength)) #set($rawAPIData = $rawAPIData.replace(", ", "&")) #else #set($rawAPIData = "") #end ## first we get the number of "&" in the string, this tells us if there is more than one key value pair #set($countAmpersands = $rawAPIData.length() - $rawAPIData.replace("&", "").length()) ## if there are no "&" at all then we have only one key value pair. ## we append an ampersand to the string so that we can tokenise it the same way as multiple kv pairs. ## the "empty" kv pair to the right of the ampersand will be ignored anyway. #if ($countAmpersands == 0) #set($rawPostData = $rawAPIData + "&") #end ## now we tokenise using the ampersand(s) #set($tokenisedAmpersand = $rawAPIData.split("&")) ## we set up a variable to hold the valid key value pairs #set($tokenisedEquals = []) ## now we set up a loop to find the valid key value pairs, which must contain only one "=" #foreach( $kvPair in $tokenisedAmpersand ) #set($countEquals = $kvPair.length() - $kvPair.replace("=", "").length()) #if ($countEquals == 1) #set($kvTokenised = $kvPair.split("=")) #if ($kvTokenised[0].length() > 0) ## we found a valid key value pair. add it to the list. #set($devNull = $tokenisedEquals.add($kvPair)) #end #end #end ## next we set up our loop inside the output structure "{" and "}" { #foreach( $kvPair in $tokenisedEquals ) ## finally we output the JSON for this pair and append a comma if this isn't the last pair #set($kvTokenised = $kvPair.split("=")) "$util.urlDecode($kvTokenised[0])" : #if($kvTokenised[1].length() > 0)"$util.urlDecode($kvTokenised[1])"#{else}""#end#if( $foreach.hasNext ),#end #end }
- 点击"制图模板"旁边的勾号下拉列表。
- 点击"< - 方法执行"。
- 点击"部署API"。
- 部署阶段="新阶段",阶段名称="生产"。
- 点击"部署"。
醇>