記錄一下JFinal 在controller 新增事務處理
阿新 • • 發佈:2019-01-24
在controller新增事務;
@Before(value = { ErrorInterceptor.class, Tx.class })
前面是攔截器處理自定義拋異常 攔截器把錯誤資訊顯示到頁面 這種事務的寫法 如果程式碼加了try 事務是不起作用的 必須手動拋異常
public class XXController extends BaseMsgController {}
剛開始 我寫成了 @Before(Tx.class) 不管怎麼弄都不好使, 這種寫法是新增到方法上的
自定義拋異常程式碼: 下面catch裡面 不手動拋異常 事務是不會回滾的 如果是在方法上面加 @Before...則不用手動拋 如果是在類上面整體加的需要手動拋異常
try { order.update(); reVo = new ReVo(order); } catch (Exception e) { logger.info(e.getMessage()); Map<String, Object> map = new HashMap<String, Object>(); map.put("msg", "網路異常請重新整理重試!"); UnifyThrowEcxp.throwExcp(e, map); }
異常處理類:
public class UnifyThrowEcxp { /** * 統一拋異常- maps裡面可自定義異常引數 */ public static void throwExcp(Exception e, Map<String, Object> maps) { Map<String, String> map = new HashMap<String, String>(); map.put("msg", e.getMessage()); map.put("text", e.getMessage()); if (!maps.isEmpty()) { map.put("errMsg", JSONObject.toJSONString(maps)); } throw new RuntimeException(JSONObject.toJSONString(map)); } }
攔截器錯誤處理: 這裡只是簡單的 處理了一下 直接把錯誤資訊render到了頁面
public class ErrorInterceptor implements Interceptor { public void intercept(Invocation ai) { try { ai.invoke(); } catch (Exception e) { JSONObject jo = JSONObject.parseObject(e.getMessage()); ai.getController().renderJson(jo.toJSONString()); } } }
執行結果:
手動拋錯呼叫的程式碼: 如果不新增自定義錯誤資訊 就直接傳一個 空的map就行
Map<String, Object> map = new HashMap<String, Object>();
map.put("msg", "測試測試測試!");
UnifyThrowEcxp.throwExcp(e, map);
菜鳥發帖 大神勿噴 純屬記錄一下過程