如何使用graphql java响应扩展?

如何使用graphql java响应扩展?,java,spring,graphql,Java,Spring,Graphql,我对GraphQL的响应必须遵循特定的 { data:{} errors:[{}] extensions:{} } 然而,我不确定如何用我的方法的扩展来响应。 我正在使用graphqlspring引导,它引入了graphqljava、graphqljava工具和graphqljavaservlet 我知道查询/变异方法的结果将被包装在数据对象中,如果抛出任何异常,它们将被包装在错误中 如果我将GraphQL模式定义为 type Query { someQuery

我对GraphQL的响应必须遵循特定的

{
    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()