GraphQL - как отлавливать "внутренние" ошибки Apollo / GraphQL - Java Spring Boot - PullRequest
0 голосов
/ 14 декабря 2018

Я начал работать с GraphQL в течение одной недели и пока не мог выяснить, как отлавливать «внутренние» ошибки GraphQL, такие как CoercingParseValueException .Потому что наш интерфейс использует эту конечную точку для получения некоторой информации о доставке.Если схема или обязательное поле отсутствует, то GraphQL сам отправляет ошибку, которая только что получила сообщение с произвольными строками, которые необходимо проанализировать на внешнем интерфейсе, чтобы понять это сообщение и показать клиенту правильную ошибку.

ДляВ нашем проекте мы определили модель ошибок для пользовательских ошибок.Эта модель ошибок содержит поле кода с самоопределенным кодом для каждой ситуации, такой как NotFoundException, ValidationException и т. Д.

Но как я могу отловить ошибки в GraphQL и изменить их?

Аппорации:

@Component
public class GraphQLErrorHandler implements graphql.servlet.GraphQLErrorHandler {

    @Override
    public List<GraphQLError> processErrors(List<GraphQLError> list) {
       return list.stream().map(this::getNested).collect(Collectors.toList());
    }

    private GraphQLError getNested(GraphQLError error) {
        if (error instanceof ExceptionWhileDataFetching) {
            ExceptionWhileDataFetching exceptionError = (ExceptionWhileDataFetching) error;
            if (exceptionError.getException() instanceof GraphQLError) {
                return (GraphQLError) exceptionError.getException();
            }
        }
        return error;
    }

} 

У меня не работает.ProcessErrors никогда не вызывается.Я использую Spring Boot (версия Kickstarter)

Для пользовательских ошибок я использую новую функцию, которая была выпущена в течение 10 дней.

@Component("CLASSPATH TO THIS CLASS")
public class GraphQLExceptionHandler {

    @ExceptionHandler({NotFoundException.class})
    GraphQLError handleNotFoundException(NotFoundException e) {
        return e;
    }

    @ExceptionHandler(ValidationException.class)
    GraphQLError handleValidationException(ValidationException e) {
        return e;
    }
}

Этот подход работает отличнос пользовательскими сообщениями об ошибках.Чтобы использовать эту функцию, мне нужно включить свойство graphql-servlet enabled-обработчики исключений и установить для него значение true.Тем не менее, этот подход не улавливает «внутренние» ошибки Apollo / GraphQL, даже если аннотация ExceptionHandler определена с Exception.class.

Может быть, может помочь мне с этой проблемой?

Большое спасибо

...