【问题标题】:How to programmatically define a field of type yet-to-be fully defined in GraphQL-Java?如何以编程方式定义尚未在 GraphQL-Java 中完全定义的类型字段?
【发布时间】:2021-06-14 04:26:04
【问题描述】:

我正在“玩”graphql-java 和相关的 kickstarter servlet,修改它以根据我自动发现的类型以编程方式构建模式。该文档(几乎)在那里,但在某些地方已经过时并且引用了不推荐使用的方法。我的特殊问题是GraphQLFieldDefinition.Builder 有四种type(...) 方法的变体——三种接受各种(其他)构建器,一种接受GraphQLOutputType,我可能都没有。此外,那些接受构建器的人实际上在这些构建器上调用build() 方法,所以我也急于传递我的任何“未完成”类型的构建器。我想预先定义所有类型,根本没有字段,然后在之后向它们添加字段,但是如果 build() 在那个时间点被调用这些,即使它们今天没有进入不需要的状态,我可以看到未来的更新可能最多需要一次 build() 调用。

所以问题是如何将字段声明为尚未定义或未完全定义的类型?例如,Employeemanager 字段本身就是 Employee 类型,例如:

type Employee {
   name: String!
   manager: Employee
   reports: [Employee!]
   buddy: Employee
   ...
}

【问题讨论】:

  • 我想我可能已经找到了答案——GraphQLTypeReference。将在创建答案之前检查这是否有效(此时没有给我答案)
  • GraphQLTypeReference 允许引用但不允许可空性规范...
  • OK... GraphQLNonNull 包装器来解决这个问题...

标签: graphql graphql-java


【解决方案1】:

正如我在我的 cmets 中所指出的,与其尝试(直接)使用构建器或构建类型,不如创建一个 GraphQLTypeReference 的实例,而不是像这样:

GraphQLTypeReference.typeRef(typeName)

这将在构建架构时自动解决。

如果我们想指出即使引用的类型是不可为空的,我们还需要像这样包装到GraphQLNonNull 包装器中:

GraphQLNonNull.nonNull(typeRef)

...并将其用作类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2021-06-09
    • 2019-05-30
    • 2019-06-06
    • 2020-01-09
    • 1970-01-01
    • 2023-01-12
    相关资源
    最近更新 更多