Как Spring ExceptionHandler обрабатывает исключения во время выполнения
Я использую SpringControllerAdvice и @ExceptionHandler для обработки исключений. Любой метод генерирует пользовательское исключение из контроллера и обрабатывает его соответствующим @ExceptionHandler. Если возникает исключение времени выполнения (например, любое исключение HibernateException), оно вызывает исключение времени выполнения, и у меня нет @ExceptionHandler для исключений RuntimeException.
Мой вопрос, как обрабатывать любые исключения во время выполнения? мне нужно добавить @ExceptionHandler для каждого исключения, которое выбрасывается контроллером? Я не хочу создавать Generic ExceptionHandler для Exception.class, потому что я должен отправить другой код ошибки в соответствии с возникшей исключительной ситуацией.
Один из способов сделать это добавить попробовать ловить блок в контроллере, а затем бросить пользовательское исключение из блока ловушки? или есть другой способ получше?
Все @ExceptionHandlers находятся внутри класса @ControllerAdvice.
1 ответ
Альтернатива не поймать Exception
в Controller
, поймать все Exception
в service
слой и бросить пользовательское исключение, например. если вам не удалось сохранить запись, бросьте DatabaseException
с сообщением. см. ниже метод:
Student persist(Student object){
try{
studentDao.insert(object);
}catch(HibernateException e){
throw new DatabaseException("database operation failed!");
}
return student;
}
от вашего метода обработчика исключений вы можете получить сообщение. Таким образом, вы можете установить разные сообщения на разные исключения.