Spring ExceptionHandler如何处理运行时异常

时间:2016-01-21 06:58:14

标签: spring exceptionhandler

我使用spring的@ControllerAdvice和@ExceptionHandler进行异常处理。 任何方法都会从Controller抛出自定义异常,相应的@ExceptionHandler会处理它。如果发生运行时异常(例如任何HibernateException),那么它将抛出Runtime Exception,并且我没有RuntimeExceptions的任何@ExceptionHandler。

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

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

所有@ExceptionHandlers都在@ControllerAdvice类中。

1 个答案:

答案 0 :(得分:3)

替代方法是不要在Exception中抓住Controller。捕获Exception层中的所有service并抛出自定义异常,例如。如果您持续记录失败,请向DatabaseException发送消息。见下面的方法:

Student persist(Student object){
   try{
      studentDao.insert(object);
   }catch(HibernateException e){
      throw new DatabaseException("database operation failed!");
   }
   return student;
}
从你的异常处理程序方法

你可以得到消息。这样你可以在不同的Exception上设置不同的消息。