Java GraphQL-将字段值传递给对象的解析器
我希望使用另一种对象类型将字段值传递给已解析的字段Java GraphQL-将字段值传递给对象的解析器,java,graphql,graphql-java,Java,Graphql,Graphql Java,我希望使用另一种对象类型将字段值传递给已解析的字段 如果我有'Customer>User>Profile',另一种说法是如何将Customer中的CustomerID字段值作为参数或变量传递给Profile,以便正确解析?在任何级别上向解析程序(DataFetcher)提供信息的方法有5种(从graphql java v12开始): 1)直接在查询中传递它们(可能在多个级别上): {customer(id: 3) { user { profile(id: 3) {
如果我有'Customer>User>Profile',另一种说法是如何将Customer中的CustomerID字段值作为参数或变量传递给Profile,以便正确解析?在任何级别上向解析程序(
DataFetcher
)提供信息的方法有5种(从graphql java v12开始):
1)直接在查询中传递它们(可能在多个级别上):
{customer(id: 3) {
user {
profile(id: 3) {
name
}
}
}
}
2)从源对象获取值
源是封闭查询的结果。
在您的情况下,customer
查询的源是根(无论您在查询执行时提供了什么,例如
graphQL.execute(ExecutionInput.newExecutionInput()
.query(query)
.root(root)
.build())
user
查询的源是返回的customer
查询,可能是某个customer
实例。profile
查询的源是user
查询返回的任何内容,可能是user
实例。
您可以通过代码>数据DATAFETCHION环境(CustomerID)<代码>获得源代码的保存。因此,如果<代码>用户<代码>包含<代码> < <代码> >,只需通过<代码>((用户)Env.GeSoCube())获得.GuestCuuleID()/Case>。如果没有,请考虑将结果封装到包含子查询所需的所有对象中。
3)使用共享上下文传递值
如果您自己不提供自定义上下文,GraphQLJava将为您提供一个GraphQLContext
的实例。因此,在customer
的DataFetcher
中,您可以将CustomerID
存储到其中:
Customer customer = getCustomer();
GraphQLContext context = env.getContext();
context.put("CustomerID", customer.getId());
稍后,在profile
的DataFetcher
中,您可以从上下文中获取它:
GraphQLContext context = env.getContext();
context.get("CustomerID");
要提供自定义上下文,请在执行查询时传递它:
ExecutionInput input = ExecutionInput.newExecutionInput()
.query(operation)
.context(new ConcurrentHashMap<String, Object>())
.build()
graphQL.execute(query, input);
5)使用本地上下文传递值(可能从graphql java v12开始)
不要直接返回结果,而是将其包装成一个
DataFetcherResult
。通过这种方式,您还可以将任何对象附加为localContext
,该对象将通过DataFetchingEnvironment\getLocalContext()
提供给所有子DataFetcher
s。没有任何代码或其他有关您所使用内容的信息。我没有使用任何用于Java的GraphQL库,所以YMMV,但通常会将此信息附加到为每个分辨率点返回的值中。当你从客户那里得到用户时,它应该携带客户的一些(或全部)数据,同样也会携带到配置文件,所以(天真地)你可能会做一些((Profile)resolveparms.getSource()).getUser().getCustomer().getId()
ExecutionStepInfo stepInfo = dataFetchingEnvironment.getExecutionStepInfo();
stepInfo.getParent().getArguments(); // get the parent arguments