【发布时间】:2016-04-27 07:32:37
【问题描述】:
我正在使用 spring 的 @ControllerAdvice 和 @ExceptionHandler 进行异常处理。 任何方法都会从 Controller 抛出自定义异常,并由相应的 @ExceptionHandler 处理它。如果发生运行时异常(例如任何 HibernateException),那么它将抛出运行时异常,并且我没有任何 @ExceptionHandler 用于运行时异常。
我的问题是如何处理任何运行时异常?我需要为控制器抛出的每个异常添加@ExceptionHandler 吗? 我不想为 Exception.class 创建一个 Generic ExceptionHandler,因为我必须根据发生的异常发送不同的错误代码。
一种方法是在 Controller 中添加 try catch 块,然后从 catch 块中抛出自定义异常? 还是有其他更好的方法?
所有@ExceptionHandler 都在@ControllerAdvice 类中。
【问题讨论】:
-
您处理运行时异常的方式与处理已检查异常的方式相同。为HibernateException添加一个ExceptionHandler,它将处理控制器抛出的HibernateExceptions。
-
@JBNizet 感谢您的评论。
-
由于数据库中的重复条目,我收到 MySQLIntegrityConstraintViolationException。如果我为此异常创建单独的 ExceptionHandler 并返回任何消息,例如“记录已存在”,但可能由于其他原因引发了相同的异常,在这种情况下,我的消息不合适。这种情况该如何处理?
-
消息应该是通用的,并作为最后的手段显示。您应该首先尝试避免该异常,方法是在插入该记录之前检查它尚不存在。