如何在 Spring 中为 GraphQL 实现异常处理程序

How to implement exception handler for GraphQL in Spring

我正在构建使用 GraphQL 和 leangen graphql-spqr 的 Web 应用程序。
我有异常处理问题。例如在服务 class 中,我正在使用 spring bean 验证来检查一些有效性,如果它不正确,它会抛出 ConstraintViolationException。
有没有办法添加一些异常处理程序来向客户端发送正确的消息?像 ExceptionHandler 用于静止控制器 api 的东西? 或者也许应该以其他方式完成?

我找到的解决方案是实现 DataFetcherExceptionHandler,覆盖 onException 方法并将其设置为默认异常处理程序。

public class ExceptionHandler implements DataFetcherExceptionHandler {

    @Override
    public DataFetcherExceptionHandlerResult onException(DataFetcherExceptionHandlerParameters handlerParameters) {

    Throwable exception = handlerParameters.getException();

    // do something with exception

    GraphQLError error = GraphqlErrorBuilder
            .newError()
            .message(exception.getMessage())
            .build();

    return DataFetcherExceptionHandlerResult
            .newResult()
            .error(error)
            .build();
    }
}

并将其设置为查询和变更的默认异常处理程序

GraphQL.newGraphQL(someSchema)
            .queryExecutionStrategy(new AsyncExecutionStrategy(new ExceptionHandler()))
            .mutationExecutionStrategy(new AsyncExecutionStrategy(new ExceptionHandler()))
            .build();