因此,我一直在编写一个使用GraphQL java实现API的微服务。GraphQL强制对客户端提供的查询进行一定级别的验证。然而,在解析查询时出现问题时,我看到GraphQL显示了暴露微服务内部的消息。
我需要什么?一种处理来自解析器函数抛出的所有异常/错误的方法,以便我可以在GraphQL创建相应响应之前对异常/错误进行消毒。
我查阅了官方文档和许多堆栈溢出的问题,但未能找到任何关于处理的地方。如果我找到了任何内容,它们都是针对以前版本的,并且不再受支持。
我参考了一些链接 - 1. https://www.howtographql.com/graphql-java/7-error-handling/ 2. GraphQL java send custom error in json format 3. https://www.graphql-java.com/documentation/v13/execution/ 我已经完成了以下工作 -
创建自定义处理程序
我需要什么?一种处理来自解析器函数抛出的所有异常/错误的方法,以便我可以在GraphQL创建相应响应之前对异常/错误进行消毒。
我查阅了官方文档和许多堆栈溢出的问题,但未能找到任何关于处理的地方。如果我找到了任何内容,它们都是针对以前版本的,并且不再受支持。
我参考了一些链接 - 1. https://www.howtographql.com/graphql-java/7-error-handling/ 2. GraphQL java send custom error in json format 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.