我們在捕獲到異常後,在cath中打印了異常信息,並且向上拋出了異常,這時候異常信息不能打印堆棧信息,只有一個錯誤提示,如果不調用initCause是無法打印出所有異常鏈的如下所示:
} catch (Exception e) {
LOGGER.error("查詢服務單管理列表異常", e);
throw new RefundException(
ExceptionDict.QUERY_USER_PRIVIDER_LIST_FAILURE_ERROR_CODE,
ExceptionDict.QUERY_USER_PRIVIDER_LIST_FAILURE_ERROR_MSG);
}
以上代碼無法打印堆棧信息,應該改爲:
} catch (Exception e) {
LOGGER.error("查詢服務單管理列表異常", e);
RefundException refundException = new RefundException(
ExceptionDict.QUERY_USER_PRIVIDER_LIST_FAILURE_ERROR_CODE,
ExceptionDict.QUERY_USER_PRIVIDER_LIST_FAILURE_ERROR_MSG);
refundException.initCause(e);
throw refundException;
}
或者在自定義異常中增加構造方法:
public ItemException(String code, String message, Exception e) {
super(code,message,e);
}
在拋異常時在參數中傳入e
} catch (Exception e) {
log.error("批量插入商品擴展信息失敗 - list:{},e:{}",list.toString(),e);
throw new ItemException(ExceptionDict.INSERT_SHOP_ITEM_EXPANDS_ERROR_CODE,ExceptionDict.INSERT_SHOP_ITEM_EXPANDS_ERROR_MSG, e);
}