從e.getMessage()為null看Java異常機制


問題:自定義異常觸發了,但是自定義的提示信息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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM