我正在使用[com.graphql-java:graphql-java:8.0]依赖项开发一个graphql服务。基本上,我需要根据父模式响应获取一些条件数据。例如,如果 ResultOne 响应 contentTypeId == 1,我需要使用 Fish 类型模式获取并准备其他响应,因此对于 contentTypeId == 2,我需要使用 Fruit 类型模式获取和准备响应。
extend type Query {
search(
name: String,
category: String
): [ResultOne]
}
type ResultOne {
contentTypeId: Int
content: Content
}
type Fish {
name: String
weight: Float
}
type Fruit {
name: String
Color: String
}
type Toy {
name: String
description: String
}
我已经厌倦了联合,但在这种情况下,发生了异常"没有为接口/联合'内容'类型定义类型解析器"。
union Content = Fish | Fruit |Toy
请随时问我你的问题,如果我的问题不清楚。
它可以通过联合来完成 - 你很接近并且错误很有帮助 - "没有为接口/联合'内容'类型定义类型解析器" - 这意味着您必须编写内容解析器,它将正确的类型与 contentTypeID 匹配。我在这里帮不了你,因为我用 Node.js 编写我的 GrapQL API。
但我建议在这里使用界面。如果你有一个可搜索的界面,你可以很容易地编写这样的模式:
extend type Query {
search(
name: String,
category: String
): [Searchable]
}
interface Searchable {
contentTypeId: Int
name: String
}
type Fish implements Searchable {
contentTypeId: Int
name: String
weight: Float
}
type Fruit implements Searchable {
contentTypeId: Int
name: String
Color: String
}
type Toy implements Searchable {
contentTypeId: Int
name: String
description: String
}
以下是关于何时使用接口和联合的一个很好的解释:
https://medium.com/the-graphqlhub/graphql-tour-interfaces-and-unions-7dd5be35de0d