首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用graphql-java响应扩展?

如何使用graphql-java响应扩展?
EN

Stack Overflow用户
提问于 2019-01-18 05:48:42
回答 2查看 1.3K关注 0票数 2

我来自GraphQL的响应必须遵循特定的格式

代码语言:javascript
复制
{
    data:{}
    errors:[{}]
    extensions:{}
}

然而,我不确定如何通过我的方法的扩展来响应。我使用的是graphql-spring-boot,它引入了graphql-java、graphql-java-tools和graphql-java-servlet。

我知道我的查询/突变方法的结果将被包装在数据对象中,如果抛出了任何异常,它们将被包装在错误中。

如果我有一个GraphQL模式定义为

代码语言:javascript
复制
type Query {
    someQuery(input: String!) : String!
}

和相应的Java方法

代码语言:javascript
复制
public String someQuery(String input) {
    return "Hello, world!";
}

GraphQL响应将是

代码语言:javascript
复制
{
    data: { "Hello, world!"}
}

我想知道如何将扩展添加到我的GraphQL响应中,以便输出为:

代码语言:javascript
复制
{
    data: {"Hello, world!"}
    extensions: { <something>}
}
EN

回答 2

Stack Overflow用户

发布于 2019-04-16 06:38:07

我找到的返回extensions的最好方法是实现SimpleInstrumentation的一个子类,它覆盖了instrumentExecutionResult (部分从graphql-java的TracingInstrumentation中窃取的代码):

代码语言:javascript
复制
@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实例时,您可以将插装类的一个实例传递给:

代码语言:javascript
复制
GraphQL graphQL = GraphQL
        .newGraphQL(schema)
        .instrumentation(new MyInstrumentation())
        .build()

(不完全确定graphql-spring-boot是如何处理这一点的,但可以想象有一些方法可以@Autowire或以其他方式配置GraphQL实例?您可以使用来自graphql-java-servletInstrumentationProvider来完成此操作)

票数 4
EN

Stack Overflow用户

发布于 2019-01-19 11:55:07

您可以实现GraphQLError,其中可以添加额外的错误属性。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54244791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档