AWS API Gateway 获取带有“+”号的请求查询参数不起作用

iib*_*sam 2 api amazon-web-services aws-api-gateway

我已经在 API 网关中实现了 GET 请求,并且工作正常,但今天我得到一个名称,其中有“+”符号,所以有人知道.../score?team=name+with+sign在哪里不起作用as ..../score?team-with-dashes工作得很好。请求的内容类型是application/json。

这是身体映射模板(application/json)

{
  "body" : $input.json('$'),
  "headers": {
    #foreach($header in $input.params().header.keySet())
      "$header": "$util.escapeJavaScript($input.params().header.get($header))" #if($foreach.hasNext),#end
    #end
  },
  "method": "$context.httpMethod",
  "params": {
    #foreach($param in $input.params().path.keySet())
      "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end
    #end
  },
  "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)

这与 URL 查询字符串参数或其他内容有关吗?

Mat*_*ser 5

查询参数中的字符+是特殊字符。它是空格字符的替换字符

因此,如果客户端打算发送.../score?team=name with spaces,则客户端可以将 URL 编码为.../score?team=name+with+spaces. 它还可能将其编码为.../score?team=name%20with%20spaces.

这意味着在服务器端,参数应该未编码并+转换回空格。

如果您确实希望+查询参数值中包含字符,则必须将其编码为%2B,例如.../score?team=name%2Bwith%2Bsign