Я разрабатываю сервис graphql, используя зависимости [com.graphql-java: graphql-java: 8.0]. По сути, мне нужно получить некоторые условные данные на основе ответа родительской схемы. например, если 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
}
Я устал от объединения, но в этом случае возникло исключение: «Не определен преобразователь типов для интерфейса / объединения типа Content».
union Content = Fish | Fruit |Toy
Пожалуйста, не стесняйтесь задать мне свой вопрос, если моя проблема не ясна.
Это можно сделать с помощью Unions - вы близки, и ошибка весьма полезна - «Для интерфейса / типа объединения 'Content' не определен преобразователь типов» - это означает, что вам нужно написать этот преобразователь контента, который будет соответствовать правильному типу для contentTypeId. Я не могу вам здесь помочь, так как пишу свои API-интерфейсы GrapQL с помощью Node.js.
Но я бы предложил использовать здесь интерфейс. Если у вас есть интерфейс с возможностью поиска, вы можете легко написать такую схему:
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