Я новичок в GraphQL и в настоящее время внедряю API-интерфейс GraphQL в установленный Java-код, используя GraphQL-SPQR, и у меня возникают проблемы с извлечением данных из иерархических классов.
Проблемы, с которыми я сталкиваюсь, заключаются в следующем.
Во-первых, я не знаю, есть ли простой способ получить все данные, связанные с возвращаемым узлом. Если это так, это было бы наиболее полезно для моих более сложных классов.
Во-вторых, когда метод возвращает абстрактный класс, мне кажется, что я могу только запросить переменные в абстрактном классе. Я уверен, что это возможно, я просто бью себя головой о стену.
В качестве простого примера
public abstract class Animal {
private String name;
private int age;
// Constructor
@GraphQLQuery(name = "name")
public String getName() {
return name;
}
// Age getter
}
public class Dog extends Animal {
private String favouriteFood;
// Constructor
@GraphQLQuery(name = "favouriteFood")
public String getFavouriteFood() {
return favouriteFood;
}
}
public class Database {
@GraphQLQuery(name = "getanimal")
public Animal getAnimal(@GraphQLArgument(name = "animalname") String animalname) {
return database.get(name);
}
}
Итак, в моем первом вопросе я сейчас спрашиваю.
"{имя животного (имя: \" Ромашка \ ") {имя возраста}}"
Это работает нормально, как и ожидалось. Однако, если вы представите, что класс имеет 10 переменных, я хотел бы просто написать эквивалент следующего без необходимости искать их.
"{узел (имя: \" Ромашка \ ") {ВСЕ}}"
Это возможно?
С точки зрения моего второго вопроса.
Следующий запрос выдает ошибку ('Поле' favouriteFood 'в типе' Животное 'не определено')
"{animalname(name: \"Bones\") {name age favouriteFood}}"
аналогично (чтение встроенных фрагментов https://graphql.org/learn/queries/)
"{animalname(name: \"Bones\") {name age ... on Dog{favouriteFood}}}"
выдает ошибку Неизвестный тип Dog
Это раздражает, так как у меня есть несколько подклассов, которые могут быть возвращены и могут потребовать обработки в разных модах. Я думаю, что могу понять, почему это происходит, поскольку GraphQL не знает, что такое истинный класс, только суперкласс, который я возвратил. Однако мне интересно, есть ли способ исправить это.
В конечном итоге, хотя я могу обойти обе эти проблемы, просто сериализовав все данные в JSON и отправив их обратно, это как бы избавляет от смысла GraphQL, и я бы предпочел найти альтернативное решение.
Спасибо за любой ответ.
Извиняюсь, если это основные вопросы.