- 此问题在此处已有答案**:
Java - find the first cause of an exception(12个答案)
三年前关闭了。
我试图在休眠中调用saveOrUpdate()
来保存数据。由于列有唯一索引,所以当我通过Eclipse调试器查看时,它会抛出ConstraintViolationException
。
因为在将数据插入表时,不同异常的根本原因可能不同。
我想知道,如何循环/遍历getCause()
以检查异常的根本原因及其消息。
更新:
感谢大家的友好回应,事情是我想在下面的图像输出一样:
我需要访问detailMessage字段。
(我真的很抱歉,如果我不能把我的问题说得更清楚。)
谢谢。
9条答案
按热度按时间zyfwsgd61#
Apache ExceptionUtils提供了以下方法:
以及
bmp9r5qi2#
我通常使用下面的实现,而不是Apache的实现。
除了复杂性之外,Apache的实现在找不到原因时返回null,这迫使我对null执行额外的检查。
通常,当寻找异常的根本原因时,我已经有了一个非空异常作为开始,如果找不到更深层次的原因,那么所有预期的建议都是失败的原因。
kzmpq1sx3#
使用java 8 Stream API,这可以通过以下方式实现:
注意,这段代码不能避免异常原因循环,因此在生产中应该避免。
dly7yett4#
你想要这样的东西吗?
还是我漏掉了什么
3yhwsihp5#
Guava's
Throwables
提供以下方法:以及
shstlldc6#
在APACHE中;实现方式如下。
突出显示的是list。contains(throwable)== false
xwbd5t1u7#
你以为会有更复杂的事吗?
vuv7lop38#
试试这个,你可以把这个函数放在一个Util类中:
用法示例:
来源:How to get the root exception of any exception
ruoxqz4g9#
递归: