1. 程式人生 > >如何在Service方法中丟擲異常並返回狀態或校驗結果?

如何在Service方法中丟擲異常並返回狀態或校驗結果?

在Service方法中,如果我們通過丟擲異常來進行事務處理(其實有更好的辦法:Spring事務配置),那麼我們的Service方法需要丟擲異常,但這裡有一個問題,之前都沒有考慮到,今天測試介面的時候發現的,問題:當發現檢驗失敗的時候,我們給Map設定了一個key為message,並返回該Map,但並沒有丟擲異常,導致事務沒有得到回滾。為了解決這個問題,我需要在校驗失敗的時候丟擲異常,而不是return Map物件,既然丟擲了異常,那如何返回校驗結果呢?我嘗試了以下3種解決方法,其中方案1不可行。 1、使用try{}catch(e){}finally{}結構來實現 在catch中重新丟擲異常e, 在finally中return Map物件,虛擬碼如下:
Map<String, Object> map = new HashMap<String, Object>();
try{
    if(check()) {
       map.put("message","check error");
	throw new Exception("Check error");
    }
} catch(Exception e) {
   throw e;
} finally{
   return map;
}
結果驗證該方案不可行,原因在於當在finally中return後,異常將不會丟擲 2、在引數中傳遞引用型別 虛擬碼如下:
<strong>public void serviceMethod(Map<String, Object> map) throws Exception{
 if(check()) {
   map.put("message", "check error");
   throw new Exception("check error");
  }

}</strong>
3、異常分類,對不同的錯誤返回不同的異常,在Service方法外捕獲異常並處理
在Service中丟擲不同的異常來表示不同的錯誤狀態 上述方案中,方案3是最符合介面定義的,引數即介面需要的東西,這種定義可以滿足服務的介面,所以推薦方案3