Передача типа Enum в качестве параметра в запрос GraphQL - Quarkus
У меня возникают проблемы с передачей типа перечисления в качестве параметра при вызове запроса. У меня есть следующие соответствующие фрагменты:
Определение перечисления
@Enum("ConfigurationEnum")
@Description("The available configuration names")
public enum ConfigurationEnum{
allocation_projection("allocation.projection.maxHistoryDays"),
testing_thingy("testing.graphql.config.service.save");
private final String configurationValue;
private ConfigurationEnum(String configurationValue){
this.configurationValue = configurationValue;
}
@Override
public String toString() {
return this.configurationValue;
}
}
Конечная точка ресурса
@Query("configurationByName")
@Description("Get a configuration by name")
@Transactional
public Configuration getByName(@Name("name") ConfigurationEnum name){
return Configuration.getByName(name.toString());
}
Функциональная реализация
@ApplicationScoped
@Entity
@Table(name="CONFIGURATION")
public class Configuration extends PanacheEntityBase {
@Id
@NotNull
private String name;
private String value;
public static Configuration getByName(String name){
return find("name", name).firstResult();
}
Мой пример запроса:
query searchByName {
configurationByName(name: allocation_projection) {
name
value
}
}
Результирующая ошибка:
"message": "Validation error of type WrongType: argument 'name' with value 'StringValue{value='allocation_projection'}' is not a valid 'Unknown Scalar Type
Желаемое поведение - передать аргумент в configurationByName
в качестве перечисления, затем обновите соответствующую запись в поле базы данных - значение перечисления. Используя скалярное значение, то есть передавая строку напрямую, все работает, как ожидалось. Мне нужно изменить тип аргумента со скаляра на перечисление. Как правило, я считаю, что это делается путем установки типа поля внутриbuildQueryType
при построении пользовательской схемы. Есть ли способ установить эту опцию в MicroProfile?
Я новичок в GraphQL в целом и особенно в парадигме MicroProfile, поэтому прошу прощения за любые простые упущения, которые я мог допустить - я не могу найти никакой документации с аналогичным случаем с использованием MicroProfile.
Спасибо!
1 ответ
Я воспроизвел вашу проблему с последней версией Quarkus (содержит SmallRye GraphQL 1.0.3), а затем попытался снова после обновления SmallRye GraphQL до последней версии 1.0.4-SNAPSHOT, и я больше не мог воспроизвести ее. Поэтому я думаю, что ваш код правильный и должен начать работать после обновления до версии Quarkus, содержащей SmallRye GraphQL 1.0.4+ (еще не выпущен, но должен быть скоро).