1

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

枚举定义

    @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作为enum传递给,然后更新数据库字段中的相应条目 - 枚举值。使用标量值 - 即直接传递字符串 - 一切都按预期工作。我需要将参数的类型从标量更改为枚举。一般来说,我相信这是通过buildQueryType在构建自定义模式时设置字段类型来完成的。有没有办法在 MicroProfile 中设置此选项?

总的来说,我对 GraphQL 非常陌生,尤其是对 MicroProfile 范例,所以请原谅我可能做出的任何简单疏忽——我找不到任何使用 MicroProfile 的类似案例的文档。

谢谢!

4

1 回答 1

0

我用当前最新的 Quarkus(包含 SmallRye GraphQL 1.0.3)重现了您的问题,然后在将 SmallRye GraphQL 更新到最新的 1.0.4-SNAPSHOT 后再次尝试,但我无法再重现它了。所以我认为你的代码是正确的,一旦你升级到包含 SmallRye GraphQL 1.0.4+ 的 Quarkus 版本(尚未发布,但应该很快),你的代码应该开始工作。

于 2020-06-15T12:56:53.563 回答