如何将JSON字符串作为查询参数传递给API网关

时间:2016-04-20 15:20:19

标签: json velocity aws-lambda aws-api-gateway serverless-framework

如何将{val: 1}之类的JSON对象作为查询参数传递给我的Lambda函数? 在Standardized way to serialize JSON to query string?之后我对我的JSON对象进行了URL编码,并请求了以下内容:mysite.com/path?json=%7B%22val%22%3A%201%7D

作为requestTemplates我尝试了以下两个选项

  1. "json": "$input.params().querystring.json"
  2. "json": "$util.parseJson($input.params().querystring.json)"
  3. 但我收到此错误消息:

      

    {“message”:“无法将请求主体解析为json:意外   character(\'v \'(代码118)):期待逗号分隔OBJECT   条目\ n在[来源:[B @ 37a2970e; line:1,column:47]“}

    如果我不对查询字符串进行编码,那么:mysite.com/path?json={"val":1}我得到400错误

1 个答案:

答案 0 :(得分:3)

  1. 您的映射模板没有生成有效的JSON,您必须用大括号包装键/值对
  2. 我猜你不想将值包装在引号中,它将是一个字符串,否则没有对象
  3. 您可以使用$util.urlDecode解码网址编码字符串
  4. 您的地图模板应如下所示:

    {"json": $util.urlDecode($input.params().querystring.json)}
    

    对于mysite.com/path?json=%7B%22val%22%3A%201%7D,此映射模板将生成以下JSON:

    {
      "json": {
        "val": 1
      }
    }
    

    如果要将查询字符串JSON在根级别传递给Lambda函数,请将其用作映射模板:

    $util.urlDecode($input.params().querystring.json)