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

Posted

技术标签:

【中文标题】将枚举类型作为参数传递给 GraphQL 查询 - Quarkus【英文标题】:Passing Enum Type as Parameter to GraphQL Query - Quarkus 【发布时间】:2020-10-02 20:14:35 【问题描述】:

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

枚举定义

    @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 'StringValuevalue='allocation_projection'' is not a valid 'Unknown Scalar Type


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

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

谢谢!

【问题讨论】:

我在使用 AWS AppSync 时遇到了同样的错误。你想清楚了吗? 这已在 Quarkus 1.6 中修复 - 不确定这是否有助于 AppSync。见github.com/smallrye/smallrye-graphql/issues/287 【参考方案1】:

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

【讨论】:

以上是关于将枚举类型作为参数传递给 GraphQL 查询 - Quarkus的主要内容,如果未能解决你的问题,请参考以下文章

Apollo Client Angular:如何将从查询中获得的数据作为参数传递给graphql中的另一个查询?

如何将参数传递给graphql查询?

将多个参数传递给 GraphQL 查询

将对象作为参数传递给 GraphQL Mutation (graphql-request)

如何将具有多个对象的状态数组作为参数传递给graphql突变?

GraphQL 将参数传递给子解析