将枚举类型作为参数传递给GraphQL查询-Quarkus

时间:2020-06-12 23:52:31

标签: java graphql quarkus smallrye

我在将枚举类型作为参数传递给查询调用时遇到问题。我有以下相关摘要:

枚举定义

    @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 个答案:

答案 0 :(得分:0)

我重现了您当前使用的最新Quarkus(包含SmallRye GraphQL 1.0.3)的问题,然后在将SmallRye GraphQL更新到最新的1.0.4-SNAPSHOT之后再次尝试,但我无法重现它。因此,我认为您的代码是正确的,并且在升级到包含SmallRye GraphQL 1.0.4+的Quarkus版本(尚未发布,但应该会很快)后就应该可以正常工作。