Joh*_*Doe 7 java spring graphql
我来自 GraphQL 的响应必须遵循特定的格式
{
data:{}
errors:[{}]
extensions:{}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何通过我的方法的扩展来做出响应。我正在使用 graphql-spring-boot 来引入 graphql-java、graphql-java-tools 和 graphql-java-servlet。
我知道查询/突变方法的结果将被包装在数据对象中,如果抛出任何异常,它们将被包装在错误中。
如果我有一个 GraphQL 架构定义为
type Query {
someQuery(input: String!) : String!
}
Run Code Online (Sandbox Code Playgroud)
以及相应的Java方法
public String someQuery(String input) {
return "Hello, world!";
}
Run Code Online (Sandbox Code Playgroud)
GraphQL 响应将是
{
data: { "Hello, world!"}
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何向 GraphQL 响应添加扩展,以便输出如下:
{
data: {"Hello, world!"}
extensions: { <something>}
}
Run Code Online (Sandbox Code Playgroud)
我发现返回的最好方法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));
}
Run Code Online (Sandbox Code Playgroud)
设置GraphQL实例时,您可以将仪器类的实例传递到:
GraphQL graphQL = GraphQL
.newGraphQL(schema)
.instrumentation(new MyInstrumentation())
.build()
Run Code Online (Sandbox Code Playgroud)
(完全不确定这是如何处理的,graphql-spring-boot但可以想象有某种方法可以@Autowire或以其他方式配置GraphQL实例? InstrumentationProviderfromgraphql-java-servlet可能是您用来执行此操作的方法)
| 归档时间: |
|
| 查看次数: |
2802 次 |
| 最近记录: |