UndefinedFragment类型的验证错误:未定义的片段

时间:2018-04-21 15:15:48

标签: graphql graphql-java

我在graphql-jave v8.0上运行了Spring boot v1.5.10个应用,而我正在尝试使用' fragment' 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'",

当然我可以通过在查询中明确传递字段名称来做到这一点,但为了举例,我有兴趣使用GraphQL的fragment功能。

知道我做错了吗?

2 个答案:

答案 0 :(得分:1)

片段未在架构中定义,它们可以让您在构建复杂查询时创建抽象 - 主要目的是让您在查询的多个部分中查询相同类型时避免重复。 / p>

答案 1 :(得分:0)

作为Andrew said,作为official docs exemplify,片段未在架构中定义,但在查询中(ad hoc):

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

fragment UserFields on School {
   age
   jobTitle
}

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

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