将枚举类型作为参数传递给 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 Mutation (graphql-request)