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

如何在AppSync查询中传递数组参数?解决类型错误问题

问题描述

我创建了一个带可选ID数组参数的AppSync查询,用该数组作为过滤器,仅返回包含数组中任一ID的数据。仅传入必填的padId参数时查询正常,但加入locationIds数组参数后,请求抛出MappingTemplate类型错误,相关信息及代码如下:

GraphQL 定义

items(
    padId: ID!
    locationIds: [ID]
  ): [item] @http(url: "https://api-${env}/item")

AppSync 请求

items(query: {
  padId: "63879aed-8f7a-4230-8215-921333ba198d", 
  locationIds: ["2b3a5532-73b1-4248-95d9-c91506d73493"]
})

AppSync 返回错误

{
  "data": {
    "items": null
  },
  "errors": [
    {
      "path": [
        "items"
      ],
      "data": null,
      "errorType": "MappingTemplate",
      "errorInfo": null,
      "locations": [
        {
          "line": 2,
          "column": 3,
          "sourceName": null
        }
      ],
      "message": "Value for field '$[params][query]' not a valid type."
    }
  ]
}

问题原因及解决方法

1. 修正请求参数结构(首要解决点)

你的GraphQL查询参数传递方式和定义不匹配:items字段的参数是直接声明的padId和locationIds,但请求中却把它们嵌套在了query对象里。这会导致AppSync无法正确解析参数,触发类型错误。

正确的请求格式应为:

items(
  padId: "63879aed-8f7a-4230-8215-921333ba198d", 
  locationIds: ["2b3a5532-73b1-4248-95d9-c91506d73493"]
)

2. 调整HTTP数据源映射模板

如果修正请求后仍报错,说明AppSync默认的映射模板无法正确处理数组类型的查询参数,需要自定义VTL模板适配后端API的参数格式:

场景1:后端接收逗号分隔的ID字符串

{
  "version": "2018-05-29",
  "method": "GET",
  "resourcePath": "/item",
  "params": {
    "query": {
      "padId": "$context.arguments.padId",
      "locationIds": #foreach($id in $context.arguments.locationIds)#if($foreach.index > 0),#end$id#end
    }
  }
}

场景2:后端接收数组格式的查询参数(如locationIds[]=id1&locationIds[]=id2)

{
  "version": "2018-05-29",
  "method": "GET",
  "resourcePath": "/item",
  "params": {
    "query": {
      "padId": "$context.arguments.padId"
    }
  }
}
#foreach($id in $context.arguments.locationIds)
  #set($discard = $context.params.query.put("locationIds[]", $id))
#end

3. 确认后端API的参数要求

不同后端框架对数组查询参数的解析规则不同,需要根据后端实际接受的格式(如逗号分隔、多键名、JSON字符串)调整映射模板的参数生成逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:24:32