問題:自定義異常觸發了,但是自定義的提示信息RuntimeException卻沒有帶過來。
1 throw new RuntimeException("不允許插入報價主項和報價子項同時重復的記錄!"); 2 String message = e.getMessage(); //得到的message為空

在Exception的父類Throwable中,有getMessage方法,該方法其實返回的就是detailMessage,從上圖看出,detailMessage為null,那通過getMessage方法當然就取不到值了。
仔細研究了一下java的異常家族。




按照流程看,設置的信息應該可以帶過來啊!原因我使用了Spring或者之類的框架,service 對象其實已經是框架托管的代理類。 於是異常被包裝成了 UndeclaredThrowableException,這時可以調用一下 Exception的getCause方法找到原始的異常。
1 String message = e.getCause().getMessage(); //能夠得到原始定義的message了

從調試信息也可以看出,其實,getCause()得到的就是原始異常target。
