Я начал работать с 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.
Может быть, может помочь мне с этой проблемой?
Большое спасибо