如何使用graphql java响应扩展?
我对GraphQL的响应必须遵循特定的如何使用graphql java响应扩展?,java,spring,graphql,Java,Spring,Graphql,我对GraphQL的响应必须遵循特定的 { data:{} errors:[{}] extensions:{} } 然而,我不确定如何用我的方法的扩展来响应。 我正在使用graphqlspring引导,它引入了graphqljava、graphqljava工具和graphqljavaservlet 我知道查询/变异方法的结果将被包装在数据对象中,如果抛出任何异常,它们将被包装在错误中 如果我将GraphQL模式定义为 type Query { someQuery
{
data:{}
errors:[{}]
extensions:{}
}
然而,我不确定如何用我的方法的扩展来响应。
我正在使用graphqlspring引导,它引入了graphqljava、graphqljava工具和graphqljavaservlet
我知道查询/变异方法的结果将被包装在数据对象中,如果抛出任何异常,它们将被包装在错误中
如果我将GraphQL模式定义为
type Query {
someQuery(input: String!) : String!
}
以及相应的Java方法
public String someQuery(String input) {
return "Hello, world!";
}
GraphQL响应将是
{
data: { "Hello, world!"}
}
我想知道如何将扩展添加到GraphQL响应中,以便输出如下:
{
data: {"Hello, world!"}
extensions: { <something>}
}
{
数据:{“你好,世界!”}
扩展:{}
}
您可以在可以添加额外错误属性的地方实现GraphQLError
我发现返回扩展的最佳方法是实现SimpleInstrumentation
的子类,该子类重写instrumentExecutionResult
(部分代码从graphql java的跟踪仪器中窃取):
(不完全确定graphql spring boot
如何处理此问题,但可以想象有某种方法可以@Autowire
或以其他方式配置graphql
实例?InstrumentationProvider
来自graphql java servlet
可能就是用于此操作的方法)
@Override
public CompletableFuture<ExecutionResult> instrumentExecutionResult(
ExecutionResult executionResult,
InstrumentationExecutionParameters parameters) {
Map<Object, Object> currentExt = executionResult.getExtensions();
Map<Object, Object> newExtensionMap = new LinkedHashMap<>();
newExtensionMap.putAll(currentExt == null ? Collections.emptyMap() : currentExt);
newExtensionMap.put("MyExtensionKey", myExtensionValue);
return CompletableFuture.completedFuture(
new ExecutionResultImpl(
executionResult.getData(),
executionResult.getErrors(),
newExtensionMap));
}
GraphQL graphQL = GraphQL
.newGraphQL(schema)
.instrumentation(new MyInstrumentation())
.build()