java異常的注意事項

我們在捕獲到異常後,在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);
 }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章