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

AWS Amplify GraphQL创建条目报错:ID!非空类型被强制赋空值

AWS Amplify 创建GraphQL条目报ID!非空错误解决方法

问题复现

原本稳定运行数月的创建类GraphQL请求,搁置应用一段时间后突然失效,抛出如下错误,不符合@model自动生成ID的预期逻辑:

Variable 'input' has coerced Null value for NonNull type 'ID!'

涉及的调用代码、GraphQL模型定义如下:

前端调用代码

const addArticle = async (event) => {
  const input = { ...article, data: JSON.stringify(article.data) };
  return await API.graphql({
    query: createArticle,
    variables: { input: input },
    authMode: "AMAZON_COGNITO_USER_POOLS",
  });
};

GraphQL模型定义

type Article
  @model
  @key(name: "byTag", fields: ["tagId", "dateWritten"])
  @key(name: "bySource", fields: ["sourceId", "dateWritten"]) {
  id: ID!
  link: AWSURL!
  title: String!
  dateWritten: String!
  articleDate: AWSDateTime
  data: AWSJSON!
  approved: Boolean!
  admin: Boolean!
  tagId: ID!
  creatorId: ID!
  creator: User @connection(fields: ["creatorId"])
  sourceId: ID!
  source: Source @connection(fields: ["sourceId"])
}

根因分析

  • Amplify @model 指令的自动生成ID逻辑,仅在创建请求的input参数完全不携带id字段时才会触发。只要入参里显式传了id: null,GraphQL入参校验层会直接拦截,根本走不到后端自动生成ID的逻辑,直接抛出非空校验错误。
  • 之前代码能正常运行,是因为当时解构的article状态对象里没有定义id属性。搁置期间大概率调整过表单初始值、状态初始化逻辑,或者某次接口返回的空数据把article对象里的id字段污染成了null,对象展开后就把id: null带进了请求入参。
  • 小概率情况是搁置期间重新执行amplify push时升级了GraphQL transformer版本,新版本对非空字段的入参校验更严格,之前隐式传undefined的场景现在会被识别为显式null触发校验。

修复方案

构造入参时显式过滤掉值为空的id字段,让后端可以正常触发自动生成ID的逻辑,修改后的代码如下:

const addArticle = async (event) => {
  const input = { 
    ...article, 
    data: JSON.stringify(article.data) 
  };
  // 移除空id,触发后端自动生成ID逻辑
  if (!input.id) {
    delete input.id;
  }
  return await API.graphql({
    query: createArticle,
    variables: { input: input },
    authMode: "AMAZON_COGNITO_USER_POOLS",
  });
};

如果修改后仍报同类错误,逐一检查模型里其余标记为ID!的非空字段:tagId、creatorId、sourceId,这类字段如果传入null也会触发相同报错,把对应空值字段从入参里移除或者补全有效值即可。不需要降级Amplify版本,也不需要调整GraphQL schema定义,入参层面过滤空值就能彻底解决问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:12:23