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

4
我如何将一个JSON对象,例如{val: 1}作为查询参数传递给我的Lambda函数?根据标准化的将JSON序列化为查询字符串的方法,我对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)"
但是我收到了以下错误信息:

{"message": "Could not parse request body into json: Unexpected character (\'v\' (code 118)): was expecting comma to separate OBJECT entries\n at [Source: [B@37a2970e; line: 1, column: 47]"}

如果我不对查询字符串进行编码,如此:mysite.com/path?json={"val":1} 我会收到400错误。
1个回答

3
  1. 您的映射模板没有产生有效的JSON,您需要用花括号包装键/值对
  2. 我猜您不想将值用引号括起来,否则它将成为字符串而不是对象
  3. 您可以使用$util.urlDecode来解码URL编码的字符串

您的映射模板应该像这样:

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

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

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

如果您希望将查询字符串JSON传递到根级别的Lambda函数,请使用以下映射模板:

如果要将查询字符串JSON传递到Lambda函数的根级别,请使用此映射模板:

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

太棒了!谢谢。 - Rentrop
你救了我的一天!谢谢 :) - romain-nio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接