GraphQL 内省查询时部分字段type.name返回空值问题求解
问题根源
这不是配置错误,是你的内省查询逻辑没有兼容GraphQL的类型包装规则:
- GraphQL的类型系统分为基础类型(标量、对象、枚举等)和包装类型(NonNull非空、List列表)两类
- 包装类型本身没有
name属性,实际的基础类型信息存储在ofType字段中
你Schema里_id: ID!、title: String!、_ts: Long!都是被NonNull包装过的类型,你直接查询外层type.name拿到的就是Null值,和实际Schema定义一致。
解决方法
调整内省查询,递归查询ofType字段获取最终的基础类型名称,下面是兼容单层/多层包装(比如[String!]!这类嵌套场景)的查询语句:
{ __type(name: "Todo") { fields { name type { name ofType { name ofType { name ofType { name # 可以根据业务需要继续嵌套更多层ofType,覆盖所有可能的包装层级 } } } } } } }
执行上述查询后,你就能在type.ofType.name字段拿到_id对应的ID、title对应的String、_ts对应的Long类型名。
内容的提问来源于stack exchange,提问作者Perestrelo
相关产品推荐
相关产品推荐

