为GraphQL java中的GraphQL枚举返回不同的值
我在应用程序中有以下枚举为GraphQL java中的GraphQL枚举返回不同的值,java,graphql,graphql-java,Java,Graphql,Graphql Java,我在应用程序中有以下枚举 public enum State { Started("newly started"), Hold("hold on"), Running("still running"), Stop("just stopped"); private String value; State(String value) { this.value = value; } public String get
public enum State {
Started("newly started"),
Hold("hold on"),
Running("still running"),
Stop("just stopped");
private String value;
State(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
我也有同样的GraphQL模式。我使用的是GraphQL java库,而不是GraphQL spqr或GraphQL java工具。当我返回此枚举时,它的名称将被返回,但我想返回它的赋值,即“仍在运行”用于运行枚举,“刚刚停止”用于停止枚举等。GraphQL java中是否有任何方法
提前谢谢
正在返回它的名称,但我想返回它的赋值
这是故意的。从:
枚举不是数值的引用,而是其本身的唯一值。它们可以序列化为字符串:表示的值的名称
枚举值被序列化为其名称。您可以提供一个附加值,该值可以在执行期间在内部使用,但该值不会在响应中使用。您可以通过提供自定义映射将GraphQL枚举映射到Java枚举。
但是GraphQL不允许枚举值包含空格。因此,您可以使用不带空格的枚举,也可以将状态字段声明为字符串 也可以提供这些字符串作为枚举值的描述
GraphQLEnumType.newEnum()
.name("State")
.value("Started", State.Started, "newly started")
// ...
.build();
或通过SDL:
enum State {
"newly started"
Started
}
可以通过以下方式查询这些说明:
query {
__type(name: "State") {
enumValues {
name
description
}
}
}
这正是我想要的。那么,你是说我没有办法做到这一点吗?我可以使用一些指令或任何其他方式来实现这一点吗?请举个例子。我不确定您在这里到底想做什么,但是如果您需要
运行
而不是运行
作为名称,那么就使用运行
作为名称。我刚刚更新了我的问题。我想将值(“newstarted”,“hold on.”返回给客户端,因为我有空格分隔的字符串,不能像在Enum中那样保留。不幸的是,这是不可能的。您必须在名称中使用下划线而不是空格,并在客户端转换它们。GraphQL规范与java枚举或它们的序列化方式无关。您可以在模式中使用您想要的任何值来表示GraphQL枚举,并且由您提供GraphQL和java之间的映射,例如通过GraphQL.schema.idl.EnumValuesProvider
。也就是说,GraphQL不允许在枚举值名称中使用空格。