0

我有一个graphql-jave v8.0在 上运行的应用程序Spring boot v1.5.10,我正在尝试利用 GraphQL 的“片段”功能来获取具有以下架构类型定义的有限数量的字段:

type School {
   id: ID
   name: String
   address: String 
   age: String
   jobTitle: String 
   ...
}

fragment UserFields on School {
   age
   jobTitle
}

type Query {
  user (id: String!): School!
}

schema {
  query: Query
}

当我执行此查询时:

{
   user (id: "123")
   {
     ... UserFields 
   }
}

预期的结果应该是:

{
  "user": {
     "age": "12",
     "jobTitle": "student"
  }
}

但是,它会导致以下错误

    "message": "Validation error of type UndefinedFragment: Undefined fragment 
     UserFields @ 'user'",

当然,我可以通过在查询中显式传递字段名称来做到这一点,但为了举例,我对利用fragmentGraphQL 的特性很感兴趣。

知道我做错了什么吗?

4

2 回答 2

1

片段没有在模式中定义,它们是让您在构建复杂查询时创建抽象的东西——主要目的是让您在查询的多个部分中查询相同类型时避免重复。

于 2018-04-21T16:04:07.390 回答
0

正如Andrew 所说,以及官方文档所举例说明的那样,片段不是在模式中定义的,而是在查询中(即席)定义的:

{
   user (id: "123") {
     ... UserFields 
   }
}

fragment UserFields on School {
   age
   jobTitle
}

无条件片段(如这里的片段)用于避免重复。想象一下在同一个操作中有多个您想要选择的地方agejobTitle

另一方面,条件片段用于根据具体的接口实现或联合子类型进行条件选择。

于 2018-04-23T22:54:04.813 回答