我在将枚举类型作为参数传递给查询调用时遇到问题。我有以下相关摘要:
枚举定义
@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无法找到类似案例的任何文档。
谢谢!
答案 0 :(得分:0)
我重现了您当前使用的最新Quarkus(包含SmallRye GraphQL 1.0.3)的问题,然后在将SmallRye GraphQL更新到最新的1.0.4-SNAPSHOT之后再次尝试,但我无法重现它。因此,我认为您的代码是正确的,并且在升级到包含SmallRye GraphQL 1.0.4+的Quarkus版本(尚未发布,但应该会很快)后就应该可以正常工作。