如何在 Graphql 中处理运行时多态性- Java
How to handle Runtime Polymorphism in Graphql- Java
我想知道我们如何处理 Graphql Schema 文件中的运行时多态性,
@Data
class Parent {
String libraryName;
}
@Data
class Child extends Parent {
String bookName;
}
测试class=>
class Test {
String id;
Child childObj;
}
现在在正常情况下会发生运行时多态性,并且 Test.Child 将使用父 class 对象进行初始化
即 Parent 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 文件中怎么提到它呢?
在您的示例中,您可以定义 Child
和 Parent
类型都实现的 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。
我想知道我们如何处理 Graphql Schema 文件中的运行时多态性,
@Data
class Parent {
String libraryName;
}
@Data
class Child extends Parent {
String bookName;
}
测试class=>
class Test {
String id;
Child childObj;
}
现在在正常情况下会发生运行时多态性,并且 Test.Child 将使用父 class 对象进行初始化 即 Parent 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 文件中怎么提到它呢?
在您的示例中,您可以定义 Child
和 Parent
类型都实现的 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。