NutzSite

Java快速开发框架


异常处理

<h1><center>异常处理</center></h1> <p>通常一个web框架中,有大量需要处理的异常。比如业务异常,权限不足等等。前端通过弹出提示信息的方式告诉用户出了什么错误。 通常情况下我们用try.....catch.... 对异常进行捕捉处理,但是在实际项目中对业务模块进行异常捕捉,会造成代码重复和繁杂, 我们希望代码中只有业务相关的操作,所有的异常我们单独设立一个类来处理它。全局异常就是对框架所有异常进行统一管理。 我们在可能发生异常的方法里throw抛给控制器。然后由全局异常处理器对异常进行统一处理。 如此,我们的Controller中的方法就可以很简洁了。 动作链 配置 在如下配置自定义 mvc的环节 io.nutz.nutzsite.common.mvc.MyActionChainMaker.java 异常处理定义统一处理类</p> <pre><code class="language-java">package io.nutz.nutzsite.common.mvc.processor; /** * 重写 Error信息处理类 * @Author: Haimming * @Date: 2019-08-09 16:27 * @Version 1.0 */ public class ErrorProcessor extends ViewProcessor { private static final Log log = Logs.get(); public static boolean isAjax(ServletRequest req) { String value = ((HttpServletRequest)req).getHeader("X-Requested-With"); return value != null &amp;&amp; "XMLHttpRequest".equalsIgnoreCase(value.trim()); } @Override public void init(NutConfig config, ActionInfo ai) throws Throwable { view = evalView(config, ai, ai.getFailView()); } @Override public void process(ActionContext ac) throws Throwable { if (log.isWarnEnabled()) { String uri = Mvcs.getRequestPath(ac.getRequest()); log.warn(String.format("Error@%s :", uri), ac.getError()); } String msg = "system.paramserror"; if (ac.getError() instanceof ErrorException) { msg = ac.getError().getMessage(); } if (ac.getError() instanceof RuntimeException ){ Throwable error = Lang.unwrapThrow(ac.getError()); if(error instanceof FailToCastObjectException){ msg = Mvcs.getMessage(ac.getRequest(),"system.object.exception") + error.getMessage(); } if(error instanceof NumberFormatException ){ msg = Mvcs.getMessage(ac.getRequest(),"system.object.exception") + error.getMessage(); } } //非AJAX 处理 if (isAjax(ac.getRequest())) { NutShiro.rendAjaxResp(ac.getRequest(), ac.getResponse(), Result.error(msg)); }else { new HttpStatusView(500).render( ac.getRequest(), ac.getResponse(), Mvcs.getMessage(ac.getRequest(), msg) ); } super.process(ac); } }</code></pre>

页面列表

ITEM_HTML