Я использую Spring GraphQL с GraphQl-Java и хочу использовать новую директиву @Oneof, представленную в GraphQL 2022. < /p>
Вот упрощенная версия моей схемы: < /p>
type Mutation {
createAnimal(input: AnimalInput!): String
}
input AnimalInput @oneOf {
dog: DogInput
cat: CatInput
}
input DogInput {
name: String
breed: String
}
input CatInput {
name: String
color: String
}
< /code>
Я хочу отобразить это в Java, используя абстрактный базовый класс и пусть Spring автоматически связывает правильный тип: < /p>
public class AnimalRequest {
private Animal animal;
// getters/setters
}
public abstract class Animal {
}
public class Dog extends Animal {
private String name;
private String breed;
}
public class Cat extends Animal {
private String name;
private String color;
}
< /code>
Мой контроллер GraphQL выглядит следующим образом: < /p>
@MutationMapping
public String createAnimal(@Argument AnimalRequest input) {
System.out.println(input.getAnimal());
return "ok";
}
< /code>
Когда я запускаю мутацию: < /p>
mutation {
createAnimal(input: {
dog: {
name: "Buddy"
breed: "Beagle"
}
})
}
< /code>
Я получаю исключение, подобное неспособности создать экземпляр животного. Это абстрактный класс? Полевое подобное тип = Dog | Cat. < /li>
Я просто хочу, чтобы Spring GraphQl (или Jackson) распознал структуру, основанную на наличии одного поля и соответственно связала его. ?>
Подробнее здесь: https://stackoverflow.com/questions/795 ... java-types