ARU*_* NV 3 json amazon-web-services aws-lambda aws-api-gateway
我试图通过传递如下参数来调用我的Lambda函数.它包含撇号(').
https://invoke_url?param=[["kurlo jack's book","Adventure Books",8.8,1]]
Run Code Online (Sandbox Code Playgroud)
字符串化为 ' https:// invoke_url?param =%5B%5B%229780786706211%22s ....`
我使用下面的映射将参数传递给lambda
"query": {
#foreach($queryParam in $input.params().querystring.keySet())
"$queryParam": "$util.escapeJavaScript($input.params().querystring.get($queryParam))" #if($foreach.hasNext),#end
#end
} Run Code Online (Sandbox Code Playgroud)
我收到了以下错误
{"message": "Could not parse request body into json: Unrecognized character escape \'\'\' (code 39)\n at [Source: [B@5b70c341; line: 29, column: 65]"}
Run Code Online (Sandbox Code Playgroud)
从映射模板中删除双引号后我也尝试过.但是没有用.
小智 6
务必在之后添加.replaceAll("\\'","'")到您的请求正文直通模板中.escapeJavaScript(data)
我发现AWS的文档中的这一点对此问题非常有帮助:
$ util.escapeJavaScript()
使用JavaScript字符串规则转义字符串中的字符.
注意此函数会将任何常规单引号(')转换为转义符(\').但是,转义的单引号在JSON中无效.因此,当在JSON属性中使用此函数的输出时,必须将任何转义的单引号(\')转回常规单引号(').这在以下示例中显示:
$util.escapeJavaScript(data).replaceAll("\\'","'")
“查询字符串”(超链接中 后面的部分?)必须是string. 无论您有什么构造,都必须附加到它后面,例如:https://invoke_url?a=x&b=y
在您的 Lambda 代码中输入:
if( event.hasOwnProperty( 'params' ) )
if( event.params.hasOwnProperty( 'querystring' ) )
params = event.params.querystring;
Run Code Online (Sandbox Code Playgroud)
(显然一些无关的检查,可能没有必要,但是呃)
在您的 API 网关中,转到:
APIs -> api_name -> Resources -> invoke_url -> GET -> Method Execution
在 URL 查询字符串参数下“添加查询字符串”a和b(或其他)
当您点击时,www.com/invoke_url?a=x&b=y您现在可以通过以下方式访问它们:
...
params = event.params.querystring;
console.log( params.a, params.b );
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7227 次 |
| 最近记录: |