我来自GraphQL的响应必须遵循特定的格式
{
data:{}
errors:[{}]
extensions:{}
}然而,我不确定如何通过我的方法的扩展来响应。我使用的是graphql-spring-boot,它引入了graphql-java、graphql-java-tools和graphql-java-servlet。
我知道我的查询/突变方法的结果将被包装在数据对象中,如果抛出了任何异常,它们将被包装在错误中。
如果我有一个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>}
}发布于 2019-04-16 06:38:07
我找到的返回extensions的最好方法是实现SimpleInstrumentation的一个子类,它覆盖了instrumentExecutionResult (部分从graphql-java的TracingInstrumentation中窃取的代码):
@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 = GraphQL
.newGraphQL(schema)
.instrumentation(new MyInstrumentation())
.build()(不完全确定graphql-spring-boot是如何处理这一点的,但可以想象有一些方法可以@Autowire或以其他方式配置GraphQL实例?您可以使用来自graphql-java-servlet的InstrumentationProvider来完成此操作)
发布于 2019-01-19 11:55:07
您可以实现GraphQLError,其中可以添加额外的错误属性。
https://stackoverflow.com/questions/54244791
复制相似问题