Skip to content

Instantly share code, notes, and snippets.

@ryanray
Created October 4, 2015 01:24
Show Gist options
  • Save ryanray/668022ad2432e38493df to your computer and use it in GitHub Desktop.
Save ryanray/668022ad2432e38493df to your computer and use it in GitHub Desktop.

Revisions

  1. ryanray created this gist Oct 4, 2015.
    51 changes: 51 additions & 0 deletions aws-api-gateway-form-to-json.ftl
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,51 @@
    ## 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
    }