Spring ExceptionHandler如何处理运行时异常

我正在使用spring的@ControllerAdvice和@ExceptionHandler进行异常处理.
任何方法都会从Controller中引发自定义异常,并由相应的@ExceptionHandler处理该异常.如果发生运行时异常(例如任何HibernateException),它将抛出运行时异常,而对于RuntimeExceptions我没有任何@ExceptionHandler.

我的问题是如何处理任何运行时异常?我需要为控制器抛出的每个异常添加@ExceptionHandler吗?
我不想为Exception.class创建通用ExceptionHandler,因为我必须根据发生的异常发送不同的错误代码.

一种方法是在Controller中添加try catch块,然后从catch块中抛出自定义异常?
还是还有其他更好的方法?

所有@ExceptionHandlers都在@ControllerAdvice类内.

解决方法:

另一种选择是在Controller中不捕获Exception.在服务层中捕获所有异常并抛出自定义异常,例如.如果持久化记录失败,则抛出DatabaseException并显示消息.参见下面的方法:

Student persist(Student object){
   try{
      studentDao.insert(object);
   }catch(HibernateException e){
      throw new DatabaseException("database operation failed!");
   }
   return student;
}

从异常处理程序方法中,您可以获得消息.这样,您可以在不同的异常上设置不同的消息.

上一篇:springboot异步线程(三)源码解析(一)


下一篇:java-Spring如何管理ExceptionHandler优先级?