如何为 graphql 创建自定义错误/异常处理程序?



所以,我一直在编写一个使用 GraphQL 的 Java 实现来实现 API 的微服务。GraphQL 对客户端提供的查询强制执行某种级别的验证。但是,如果问题发生在解决查询过程中,我已经看到 graphql 显示暴露了 micr 服务内部的消息。

我需要什么?一种处理解析器函数抛出的所有异常/错误的方法,这样我就可以在 GraphQL 创建相应的响应之前清理异常/错误。

我已经查找了官方文档和许多堆叠的流程问题,但未能找到任何谈论处理的地方。如果我找到任何,它们适用于以前的版本,不再受支持。

我提到的一些链接 - 1. https://www.howtographql.com/graphql-java/7-error-handling/2. GraphQL java 以 json 格式发送自定义错误 3. https://www.graphql-java.com/documentation/v13/execution/

我已经做了以下事情,例如-

创建自定义处理程序

@Bean
public GraphQLErrorHandler errorHandler() {
return new CustomGraphQLErrorHandler();
}
public class CustomGraphQLErrorHandler implements GraphQLErrorHandler {
@Override
public List<GraphQLError> processErrors(List<GraphQLError> errors) {
List<GraphQLError> clientErrors = errors.stream()
.filter(this::isClientError)
.collect(Collectors.toList());
List<GraphQLError> serverErrors = errors.stream()
.filter(this::isSystemError)
.map(GraphQLErrorAdapter::new)
.collect(Collectors.toList());
List<GraphQLError> e = new ArrayList<>();
e.addAll(clientErrors);
e.addAll(serverErrors);
return e;
}
private boolean isSystemError(GraphQLError error) {
return !isClientError(error);
}
private boolean isClientError(GraphQLError error) {
return !(error instanceof ExceptionWhileDataFetching || error instanceof Throwable);
}
}```
Expected behavior - The control would reach to `processErrors` method. Actual - It doesn't reach there.

您需要重写GraphQLErrorHandler中的errorsPresent方法,以便在将错误传递到该方法时返回 true。像这样:

@Override
public boolean errorsPresent(List<GraphQLError> errors) {
return !CollectionUtils.isEmpty(errors);
}

最新更新