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

GraphQL多层嵌套对象属性读取报错:非空字段返回null

解决GraphQL多层嵌套查询返回Null的报错问题

嘿,我来帮你捋清楚这个问题——你收到的"Cannot return null for non-nullable field"报错,核心原因是你的GraphQL类型定义和查询语句不匹配,具体细节如下:

问题到底出在哪?

先看你定义的Mapping类型:

type Mapping { 
  id: ID! 
  partnerSegmentId: ID! 
  ctSegmentId: CtSegment! 
}

这里的partnerSegmentId是标量类型ID!,简单说就是它只能返回一个ID字符串/数字,根本没有子字段。但你的查询里却把它当成了PartnerSegment对象来做嵌套查询:

{ 
  allMappings { 
    partnerSegmentId { 
      id 
      name 
      partner { id } 
    } 
  } 
}

这就导致GraphQL没法解析你的请求——标量类型没有子字段,只能返回null,但你又把partnerSegmentId定义成了非空(带!),所以直接触发了报错。

怎么修正?

最直接的方案是调整Mapping的类型定义,把partnerSegmentId替换成关联的PartnerSegment对象类型(同时建议改个更语义化的字段名):

type Mapping { 
  id: ID! 
  partnerSegment: PartnerSegment!  # 改成对象类型,字段名更清晰
  ctSegmentId: CtSegment! 
}

然后把查询语句改成对应字段:

{ 
  allMappings { 
    partnerSegment { 
      id 
      name 
      partner { id } 
    } 
  } 
}

如果因为业务需求必须保留partnerSegmentId这个标量ID字段,同时还要查询关联的对象,那可以在Mapping里同时加两个字段:

type Mapping { 
  id: ID! 
  partnerSegmentId: ID! 
  partnerSegment: PartnerSegment!  # 新增关联对象字段
  ctSegmentId: CtSegment! 
}

这样查询时就能按需选择:

{ 
  allMappings { 
    partnerSegmentId  # 单独查ID
    partnerSegment {  # 查嵌套的对象字段
      id 
      name 
      partner { id } 
    } 
  } 
}

最后要注意的小细节

别忘了同步调整你的GraphQL resolver!要确保partnerSegment字段的resolver能根据partnerSegmentId从数据源(比如数据库)正确获取对应的PartnerSegment对象并返回,要是resolver返回null,还是会触发非空字段的报错哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:11:09