Итак, я написал микросервис, который использует Java-реализацию GraphQL для API. GraphQL обеспечивает определенный уровень проверки предоставленных клиентом запросов. Однако в тех случаях, когда проблема возникает при разрешении запроса, я видел сообщения graphql show, которые раскрывают внутреннюю часть службы 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.