Interfaces and Unions
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
无论何时在 schema 中使用 interface 类型或 union 类型,都必须注册类型解析器。Interface 类型 和 Union 类型在 中有说明。
例如,下面的 schema 定义了一个 Movie 接口类型,它具有两个不同的具体对象类型实现。
注册以下 datafetcher 以返回一个 movie 列表。datafetcher 返回了一个 Movie 类型的组合。
GraphQL 运行时需要知道 ActionMovie
的Java实例表示 ActionMovie
的 GraphQL 类型。这种映射是 TypeResolver
的职责。
小技巧:如果一个 Java 类型的名字与 GraphQL 中的类型名字定义一样,那么 DGS 框架将会自动创建一个
TypeResolver
。并不需要添加任何代码。
如果 Java 中类型的名称和 GraphQL 类型名称不一样,你需要提供一个 TypeResolver
。一个 Type resolver 可以帮助框架从具体的 Java 类型映射到 schema 中的正确对象类型。
使用 @DgsTypeResolver
注解去注册一个 type resolver。这个注解有一个 name
属性;将其设置为 [GraphQL] schema 中的 interface 类型或 union 类型的名称。resolver 接受一个 Java interface 类型的对象,并返回一个 String,该 String 是 schema 中定义的实例的具体对象类型。下面是一个针对 Movie
接口类型的 type resolver:
你可以添加 @DgsTypeResolver
给任何一个 @DgsComponent
类型。这意味着您可以将 type resolver 与负责返回此类型数据的 datafetcher 保持在同一个类中,或者您可以为它创建一个单独的类。