如何在 Graphql-Java 中处理运行时多态性

Posted

技术标签:

【中文标题】如何在 Graphql-Java 中处理运行时多态性【英文标题】:How to handle Runtime Polymorphism in Graphql- Java 【发布时间】:2021-11-23 14:25:27 【问题描述】:

我想知道我们如何处理 Graphql Schema 文件中的运行时多态性,

@Data
class Parent 
   String libraryName;


@Data
class Child extends Parent 
 String bookName;

测试 class=>

class Test 
 String id;
 Child childObj;

现在在正常情况下会发生运行时多态性,并且 Test.Child 将使用父类对象进行初始化 即父 prnt = new Child();

例如 Schema.graphqls

type Test
  id: String!
  childObj: Child    // Cant assign Parent object


// This doesn't work
type Child 
    bookName: String
    libraryName: String


type Parent 
    bookName: String
    libraryName: String

但在 GraphQl Schema 文件中如何提及呢?

【问题讨论】:

【参考方案1】:

在您的示例中,您可以定义ChildParent 类型都实现的interface。例如,也许您将其命名为Member,并将Test.childObj 的类型更改为Member

interface Member 
  bookName: String
  libraryName: String


type Test 
  id: String!
  childObj: Member    


type Child implements Member 
    bookName: String
    libraryName: String


type Parent implements Member 
    bookName: String
    libraryName: String

另一个选项可能是extend 功能,但它似乎还没有被广泛使用。见this post。

【讨论】:

虽然我不能真正使用 interface ,我只想扩展类,但现在可以看到它有一个解决方法。谢谢

以上是关于如何在 Graphql-Java 中处理运行时多态性的主要内容,如果未能解决你的问题,请参考以下文章

Graphql-java 中的自定义标量

在 graphql-java 中注册自定义标量

多态与异常处理

如何将 ServletRequest 传递给在 graphql-java 中执行 i/o 的 pojo

graphql-java 错误数据(如扩展)被填充到客户端的“消息”字段中

在 spring boot 中使用 graphql-java 我无法在嵌套列表中查询数据