graphql-java - 读取通过 G​​raphQL Java 中的变量传递的字段参数

我有一个 GraphQL 操作,它返回一个包含字段的类型。该字段采用我想在数据 getter 中读取的参数。

如果参数是硬编码的(如下面的 myArg1),我可以直接读取它的值。如果参数是通过变量传递的(如下面的 myArg2),我只能读取变量的名称,而不能读取它的值。

我可以手动检查每个参数的类型(例如,VariableReferenceStringValue),并相应地在 DataFetchingEnvironment 上找到变量的值,但是这很麻烦。既然 GraphQL Java 有这个信息,我可以直接读取参数的值吗?

这是一个演示:

val registry = SchemaParser().parse(
    """
    type Query {
        myOperation: MyType!
    }

    type MyType {
        myField(myArg1: String!, myArg2: String!): Boolean!
    }
    """
)
val wiring = newRuntimeWiring()
    .type("Query") { builder ->
        builder.dataFetcher("myOperation") { env ->
            val myField = env.mergedField.singleField.selectionSet.selections[0] as Field
            val args = myField.arguments.map { it.value }
            println(args[0])
            println(args[1])
            true
        }
    }
    .build()
val schema = SchemaGenerator().makeExecutableSchema(registry, wiring)
val graphQl = newGraphQL(schema).build()
val query = """
    query MyOperation(${"$"}myArg2: String!) { 
        myOperation { 
            myField(myArg1: "myVar1", myArg2: ${"$"}myArg2) 
        } 
    }
"""
val builder = ExecutionInput.Builder().query(query).variables(mapOf("myArg2" to "myVar2"))
graphQl.execute(builder) // Trigger data fetcher.

输出:

StringValue{value='myVar1'}
VariableReference{name='myArg2'}

最佳答案

没必要这么复杂。如果您在“myField”的数据 getter 中,您可以使用 env.getArgument() 简单地获取参数的值:

String myArgumentValue = env.getArgument("myArgument");

对于输入类型参数,它会返回一个Map。 (参见 this)。对于标量参数,将返回什么 java 对象类型取决于底层标量实现的 Coercing

https://stackoverflow.com/questions/62335892/

相关文章:

c# - Json 列 SQL

c# - 如何评估包含局部变量名称的字符串作为 C# 中的代码

c# - 尽管已添加到我的项目中但无法使用 Bootstrap

docker - 无法加载动态库 'libcuda.so.1'; dlerror : libcuda

google-cloud-functions - GCP Console : console. lo

react-native - 在通过深度链接导航到特定路线导航时 React Native。goBa

visual-studio-code - VScode 中的 vim 仿真扩展导致问题

python - tqdm.notebook 在 jupyter notebook 中显示带有 "H

matlab - 使用鼠标右键删除选择表中的行 - Matlab 2020a

python - 查找列表中的值是否大于其下方的项目