如何在 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();
我正在构建使用 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();