You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Serverless切换Lambda集成后,AWS Gateway查询参数Filter解析错误求助

问题:Lambda Integration下查询参数转义导致JSON解析失败

我使用Serverless框架,近期已从Lambda Proxy Integration切换为Lambda Integration。目前有一个端点需在查询参数中使用Filter,使用以下请求模板映射查询字符串:

"queryStringParameters": {
  #foreach($query in $request_query.keySet())
        "$query" : "$util.escapeJavaScript($request_query.get($query))"
        #if($foreach.hasNext),#end
        #end
      }

该端点地址:
https://example.com/ds/districts?page=1&pagesize=12&filtercriteria=name~%27John%27

调用此端点时出现错误:

Could not parse request body into json: Could not parse payload into json: Unrecognized character escape \'\'\' (code 39)\n at [Source: (byte[])\"

问题原因

$util.escapeJavaScript()会将单引号转义为\',但JSON语法中仅要求双引号需要转义,单引号无需处理。当查询参数里的%27(即单引号')被转义成\'后,生成的JSON内容不符合规范,最终导致解析失败。

解决方案

方案1:仅解码URL编码字符

不需要使用$util.escapeJavaScript(),改用$util.urlDecode()解码URL编码的字符后直接包裹双引号即可,JSON内部的单引号无需转义:

"queryStringParameters": {
  #foreach($query in $request_query.keySet())
        "$query" : "$util.urlDecode($request_query.get($query))"
        #if($foreach.hasNext),#end
        #end
      }

方案2:适配JSON转义规则

如果需要处理双引号、反斜杠等JSON敏感字符,使用$util.escapeJson()替代$util.escapeJavaScript(),该方法是专门为JSON格式设计的转义工具:

"queryStringParameters": {
  #foreach($query in $request_query.keySet())
        "$query" : "$util.escapeJson($util.urlDecode($request_query.get($query)))"
        #if($foreach.hasNext),#end
        #end
      }

说明

  • $util.urlDecode():负责将URL编码的字符(如%27)解码为原始字符(')
  • $util.escapeJson():仅转义JSON语法要求的特殊字符,确保生成的内容完全符合JSON规范

内容的提问来源于stack exchange,提问作者karPower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:55:14