我有一个 GraphQL 操作,它返回一个包含字段的类型。该字段采用我想在数据 getter 中读取的参数。
如果参数是硬编码的(如下面的 myArg1
),我可以直接读取它的值。如果参数是通过变量传递的(如下面的 myArg2
),我只能读取变量的名称,而不能读取它的值。
我可以手动检查每个参数的类型(例如,VariableReference
、StringValue
),并相应地在 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# - 如何评估包含局部变量名称的字符串作为 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