Добавление данных в исключение

У меня есть вариант использования, когда я хочу обработать список элементов. Обработка не является атомарной, и для некоторых элементов в списке она может быть выполнена успешно, а для некоторых других элементов может произойти сбой. Я хочу сообщить пользователям API, что для некоторых элементов в списке обработка не удалась. У меня есть 3 варианта:

  1. Вернуть список с успешно выполненными элементами

  2. Вернуть список с элементами, которые не удалось

  3. Выбросить исключение, говорящее о том, что некоторые элементы не удались

Если я выберу третий подход и все же хочу, чтобы клиенты знали элементы, обработка которых не удалась, могу ли я добавить список в класс исключений, чтобы клиенты читали этот список, когда они получают исключение? Это целесообразно? Можно ли здесь что-то еще сделать?

Класс исключения будет выглядеть следующим образом:

@Getter @Setter
public class SomeProcessingException extends Exception {
  private static final long serialVersionUID = 1L;
  private List<SomeItem> failedItems;

  public SomeProcessingException(String message) {
    super(message);
  }
}

Это не ТАК вопрос, он основан на вашем требовании

Deadpool 22.01.2019 17:50

@Deadpool Я понимаю, что это основано на моем требовании. Я просто хочу знать, есть ли что-то не так с этим

Mohamed Shakeel 22.01.2019 17:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
472
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, вы можете расширить Exception и добавить List неудачных элементов, как вы уже делали.

Для части:

still want to let the clients know the items for which the processing failed

Что для вас клиент? Конечный пользователь? Или программист, использующий вашу библиотеку? Администратор?

Если это программист, то он может поймать ваш SomeProcessingException и получить от него список неисправных элементов.

Если это конечный пользователь, просматривающий журналы (например, администратор), вы должны переписать метод toString для SomeProcessingException.

Если это конечный пользователь, использующий клиент (браузер, телефон Android, настольное приложение...), вы должны перехватить SomeProcessingException и показать всплывающее окно или подобное, извлекая из него неудавшиеся элементы.


Многие стандартные исключения предлагают доступ к своим внутренним свойствам, которые могут использоваться при использовании класса, например, URISyntaxException имеет метод getIndex() для:

Returns an index into the input string of the position at which the parse error occurred, or -1 if this position is not known.

Точно так же SQLException имеет метод getErrorCode для:

Retrieves the vendor-specific exception code for this SQLException object.

Клиентами для меня будут пользователи моей библиотеки. Так что это осуществимо для меня. Причина, по которой я задал этот вопрос, заключалась в том, что я никогда не видел, чтобы какой-либо код выполнял такую ​​​​обработку.

Mohamed Shakeel 22.01.2019 17:59

@MohamedShakeel может получить эту информацию, и многие стандартные исключения обрабатывают ее. Это программист решает, использовать его или нет. (Проверьте обновленный ответ)

Davide Lorenzo MARINO 22.01.2019 18:14

Другие вопросы по теме