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

AWS API Gateway如何校验JSON查询参数并拦截无效请求?

AWS API Gateway请求参数校验方案

可以在请求发送至HTTP集成前完成必填参数及JSON格式的校验,并拦截无效请求返回自定义错误。你之前的代码逻辑有效但存在语法和异常处理问题,导致触发500内部服务器错误,以下是修正后的方案:

修正后的集成请求映射模板代码

## 捕获JSON解析异常,避免直接抛出500错误
#set($valid = true)
#set($statusCode = 200)
#set($errorMsg = "")

#try
    #set($filterJSON = $util.parseJson($input.params('filter')))
    
    ## 校验where子句及parameterB是否存在
    #if(!$filterJSON.containsKey("where") || !$filterJSON.where.containsKey("parameterB"))
        #set($valid = false)
        #set($statusCode = 400)
        #set($errorMsg = "A parameterB filter should be specified inside a where clause.")
    #end
#catch($e)
    #set($valid = false)
    #set($statusCode = 400)
    #set($errorMsg = "Invalid JSON format for 'filter' parameter.")
#end

## 若请求无效,覆盖响应状态和内容
#if(!$valid)
    #set($context.responseOverride.status = $statusCode)
    #set($context.responseOverride.responseBody = "{
        \"error\": {
            \"statusCode\": $statusCode,
            \"name\": \"ValidationError\",
            \"message\": \"$errorMsg\"
        }
    }")
    ## 终止请求,不再转发到集成端点
    $util.abort($statusCode, $errorMsg)
#end

## 验证通过后,正常转发请求(保留原请求映射逻辑)
$input.json('$')

关键改进说明

  • 异常捕获:用#try/#catch包裹$util.parseJson,避免非法JSON直接抛出未处理异常导致500错误。
  • 语法修正:修正变量定义的括号错误(如#set($status = 400)而非#set($status) = 400)。
  • JSON格式合规:响应体中的字符串用转义双引号包裹,确保返回合法JSON结构。
  • 请求终止:使用$util.abort()在验证失败时直接终止请求,不再执行后续集成逻辑。
  • 可靠存在性校验:用containsKey()替代$util.json.contains(),更准确判断JSON对象的键是否存在。

额外优化方案:结合API Gateway模型验证

除了映射模板,还可以用API Gateway的模型验证提前校验参数格式:

  1. 创建JSON Schema模型,定义filter参数的结构要求:
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "required": ["where"],
  "properties": {
    "where": {
      "type": "object",
      "required": ["parameterB"],
      "properties": {
        "parameterB": {
          "type": "string"
        }
      }
    }
  }
}
  1. 在API的请求验证设置中,将filter参数关联到该模型,API Gateway会自动校验JSON格式和结构,不符合时返回400错误。
  2. 再结合映射模板处理更复杂的业务校验,或自定义错误响应内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:12:33