在 graphql-java 中检测查询类型(查询、变异、订阅)

Detect query type( query, mutation, subscription) in graphql-java

有没有办法检测查询类型 querymutationsubscription ,最好不执行查询。

例如:

ExecutionInput executionInput = ExecutionInput
    .newExecutionInput()
    .query("subscription Test{test}")
    .build();

是否可以检测到这是一个订阅请求? subscription Test{test} 不执行查询?

类似于executionInput.isSubscription()

您可以使用 ParseAndValidate 来解析 ExecutionInput :

ParseAndValidateResult parseResult = ParseAndValidate.parse(executionInput);
        parseResult.getDocument().getDefinitionsOfType(OperationDefinition.class)
        .forEach(d->{
            System.out.println(d.getOperation());
        });

想法是从Document(即查询解析结果)中获取OperationDefinition的列表并获取其Operation类型(一个枚举,其值为QUERY,MUTATION,SUBSCRIPTION) 来自 OperationDefinition.

P.S。我用 graphql-java v17

测试