怎么实现全局异常处理呢?

Controller在执行的过程中,可能会报错,这个时候应该统一给 前台反馈“服务器出现异常,请重试”等个性化ajax提示。

com.jfinal.core.ActionHandler

默认都自己处理了,没有留扩展吗?

catch (RenderException e) {

if (log.isErrorEnabled()) {

String qs = request.getQueryString();

log.error(qs == null ? target : target + "?" + qs, e);

}

}

catch (ActionException e) {

int errorCode = e.getErrorCode();

String msg = null;

if (errorCode == 404) {

msg = "404 Not Found: ";

} else if (errorCode == 401) {

msg = "401 Unauthorized: ";

} else if (errorCode == 403) {

msg = "403 Forbidden: ";

}

if (msg != null) {

if (log.isWarnEnabled()) {

String qs = request.getQueryString();

log.warn(msg + (qs == null ? target : target + "?" + qs));

}

} else {

if (log.isErrorEnabled()) {

String qs = request.getQueryString();

log.error(qs == null ? target : target + "?" + qs, e);

}

}

e.getErrorRender().setContext(request, response, action.getViewPath()).render();

}

catch (Exception e) {

if (log.isErrorEnabled()) {

String qs = request.getQueryString();

log.error(qs == null ? target : target + "?" + qs, e);

}

renderManager.getRenderFactory().getErrorRender(500).setContext(request, response, action.getViewPath()).render();

} finally {

if (controller != null) {

controller.clear();

}

}


评论区

JFinal

2018-09-25 14:00

用一个全局拦截器,内部结构大致如下:

try {
inv.invoke();
}
catch(Exception e) {
inv.getController().renderJson(....);
}

fansunion

2018-09-26 11:51

@JFinal 好吧,这是一种思路。actionhandle有考虑扩展吗? 把异常那部分 抽象下。 开发者可以自己处理异常。

fansunion

2018-09-26 11:53

@JFinal http://www.jfinal.com/feedback/4537 麻烦看下这个,探讨下。有啥更好的建议没。(VIP爽歪歪,不但解决JFinal问题,实际上顺带 探讨了 框架的扩展,程序的方便、简洁)(*^__^*)

热门反馈

扫码入社