@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
public Map<String, Object> saveNewOrder(Order order) {
Map<String, Object> map = new HashMap<>();
//保存訂單
try {
orderMapper.insertOrder(order);
} catch (Exception e) {
throw new RuntimeException("6546666666666666666666666");
}
//保存日志
try {
orderLogMapper.insertLog(orderLog);
} catch (Exception e) {
throw new RuntimeException(e);
map.put("code", "1002");
map.put("msg", "創建訂單日志例外");
return map;
}
Map<String, Object> data = new HashMap<>();
map.put("code", "0");
return map;
}
如代碼所示,假設保存日志失敗,throw new RuntimeException(e);后,回滾成功。但后面的代碼都不會執行了。
問題:拋出例外后,還可以回傳自定義的提示內容給前臺嗎?避免回傳服務器的出錯代碼給前臺。
謝謝~
uj5u.com熱心網友回復:
需要轉義錯誤資訊,把技術錯誤翻譯成業務錯誤資訊uj5u.com熱心網友回復:
一般情況下在最外層處理例外即可如果springmvc,弄一個bean繼承HandlerExceptionResolver,然后再封裝例外資訊,如果是其他,可以考慮在最外層做個過濾器try catch例外,然后把例外訊息包裝,如果是自定義例外,則回應例外的message,如果是其他例外,則直接到500頁面
有個小小的建議,方法回傳型別最好是具有業務意義的型別,而不是跟業務無關的訊息,提示訊息通過例外傳遞,這樣代碼簡單明了,還有try catch例外記得列印日志
uj5u.com熱心網友回復:
拋出例外,秉著誰接受誰處理,誰呼叫誰處理的原則,你這個方法SpingMVC內部呼叫的,會由MVC處理,runtimeException應該會終止掉這個操作,前臺可能接受的是500uj5u.com熱心網友回復:
對的就是這樣的,
翻譯給前臺去處理提示給客戶
uj5u.com熱心網友回復:
增加finally{,把后邊必須執行的}放到里面uj5u.com熱心網友回復:
666,謝謝了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/227192.html
標籤:Java相關
