Карта / Исключения / Обработка по уровням

Обработка по уровням

В реальном приложении исключения обрабатывают не где попало, а по правилам:

  • не глотать: пустой catch {} прячет проблему — как минимум залогируй;
  • лови узко (конкретный тип), а не catch (Exception e) на всё подряд;
  • оборачивай с причиной (chaining): throw new ServiceException("не удалось создать заказ", e) — исходное исключение сохранится в cause;
  • обрабатывай на правильном уровне: низкие слои оборачивают в доменные ошибки, верхний (например @ControllerAdvice) — логирует и формирует ответ пользователю.
try {
    orderRepository.save(order);
} catch (SQLException e) {
    throw new ServiceException("не удалось сохранить заказ", e);   // обернули с причиной
}
🎤 Закрыл тему, если можешь объяснить:
• почему нельзя «глотать» исключения;
• что значит обрабатывать исключения «на правильном уровне».