Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为GraphQL java中的GraphQL枚举返回不同的值_Java_Graphql_Graphql Java - Fatal编程技术网

为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不允许在枚举值名称中使用空格。