Как сохранить исходную трассировку стека, когда исключение обернуто в другое пользовательское исключение и переброшено - PullRequest
0 голосов
/ 04 января 2019

Я создал загрузочное приложение Spring со следующими слоями

  1. Контроллер
  2. BusinessLayer
  3. DAOImplLayer

Контроллер вызывает бизнес-уровень, а бизнес-уровень вызывает DAOImplLayer. Я создал два разных пользовательских исключения (BusinessException и DAOException)

В классе DAOImpl я перехватываю DataAccessException и выбрасываю DAOException (с объектом dataAccessException в параметре, поскольку SonarQube жалуется либо на журнал, либо на повторную выдачу исключения DataAccessException.)

catch (DataAccessException dataAccessException)
{
      throw new DAOException(dataAccessException, INTERNAL_SERVER_ERROR, CODE_INTERNAL_SERVER,
          dataAccessException.getCause().getMessage());
}

В BusinessImpl я ловлю DAOException и выкидываю BusinessException

catch (SecurityDAOException e)
{
    some logic
    throw new BusinessException(e, e.type, e.code, UNABLE_TO_PROCESS_REQUEST);  
}

Я написал общий класс Handler для регистрации исключений.

  @ExceptionHandler(BusinessException.class)
  protected ResponseEntity<Object> handleEntityNotFound(BusinessException businessException)
  {
    if (null != businessException.getCause())
    {
      LOG.error("BusinessException: ", businessException);
    }
 some logic
  }
  1. Как сохранить исходную трассировку стека. Я ищу что-то похожее

    Исключение в потоке "main" java.lang.ArithmeticException: / на ноль на com.exception.copy.Layer3.getLayer3 (Layer3.java:8) на com.exception.copy.Layer2.getLayer2 (Layer2.java:9) at com.exception.copy.Layer1.main (Layer1.java:9)

  2. Хорошо ли иметь собственное исключение для каждого слоя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...