springMVC实现全局异常处理
来源:互联网 发布:申万证券交易软件 编辑:程序博客网 时间:2024/06/04 18:31
你还在为控制器和service层中的try catch代码段感到烦恼吗,每写一个方法,都要进行try catch或者抛异常处理,然而捕获到异常之后的处理无非就是告诉用户,后台程序出错了,如果请求的是页面,则返回用户一个错误页面,告诉用户后台程序出错了,如果是ajax请求呢,则要返回一个错误代码,告诉前端程序,后台运行出错了。所以综上所属,无论后台出现什么样的异常,我们只需要在后台记录下异常日志。然后提示用户后台程序出错了即可。所以,根据springmvc中提供的HandlerExceptionResolver接口,然后自己实现了一个全局异常处理类,只需要在spring中注册游戏i啊即可。
直接上代码
package com.jd.trial.common.exception;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.jd.trial.common.json.JsonResult;import com.jd.trial.common.utils.AjaxUtils;import org.apache.log4j.Logger;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.ModelAndView;/** * 全局异常处理 * * @ClassName : ExceptionHandler * @Author : *** * @CreateDate : 2014年4月23日 下午2:33:43 */public class ExceptionHandler implements HandlerExceptionResolver { private final Logger log = Logger.getLogger(getClass()); private String ajaxErrorCode = "ERROR";//ajax 请求错误提示 private String errorUrl = "/showError.htm";//普通请求错误后转发的请求 public String getAjaxErrorCode() { return ajaxErrorCode; } public void setAjaxErrorCode(String ajaxErrorCode) { this.ajaxErrorCode = ajaxErrorCode; } public String getErrorUrl() { return errorUrl; } public void setErrorUrl(String errorUrl) { this.errorUrl = errorUrl; } /** * 全局异常处理 */ @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { log.error(ex.toString(), ex); if (isAjaxRequest(request)) { log.error(" ajax request error ,return " + ajaxErrorCode); try { AjaxUtils.write(response, ajaxErrorCode); } catch (IOException e) { log.error(e.toString(), e); } return null; } else { log.error("normal request error ,return " + request.getContextPath() + errorUrl); try { //request.getRequestDispatcher(errorUrl).forward(request, response); response.sendRedirect(errorUrl); } catch (IOException e) { log.error(e.toString(), e); } } return new ModelAndView(); } /** * 判断request是否为ajax请求 * * @param request * @return : boolean * @Method_Name : isAjaxRequest * @Creation Date : 2014年4月21日 上午10:51:07 * @version : v1.00 * @Author : *** * @Update Date : * @Update Author : */ private boolean isAjaxRequest(HttpServletRequest request) { // return request.getRequestURI().startsWith("/api"); String requestType = request.getHeader("X-Requested-With"); return requestType != null && requestType.equals("XMLHttpRequest"); }}
然后在spring-servlet.xml中注册即可,如下示例
<!-- 全局异常处理配置 start --> <bean id="exceptionResolver" class="com.jd.trial.common.exception.ExceptionHandler"> <property name="ajaxErrorCode" value="${ajaxErrorCode}"></property> <!-- ajax 请求错误后返回的错误代码,必须int类型 --> <property name="errorUrl" value="${errorUrl}"></property> <!-- 普通请求错误后转发的请求 --> </bean> <!-- 全局异常配置 end -->
0 0
- springMVC实现全局异常处理
- SpringMVC实现全局异常捕获处理
- springMVC 全局异常处理
- springMVC全局异常处理
- SpringMVC全局异常处理
- springmvc全局异常处理
- springmvc全局异常处理
- springmvc全局异常处理
- springmvc全局异常处理
- SpringMVC 全局异常处理
- springmvc全局异常处理
- SpringMVC 全局异常处理
- springMVC全局异常处理
- springMVC全局的异常处理
- SpringMVC 全局异常处理代码
- Springmvc的全局异常处理
- SpringMvc 中全局异常处理
- springmvc定义全局异常处理
- mysql执行SQL语句时,出现You can't specify target table '表名' for update in FROM clause错误
- 代码动态添加动画效果
- 《netty权威指南》2.3 NIO编程
- 小说爬虫之JAVA代码的实现(附代码)
- 运维年薪30w 50w
- springMVC实现全局异常处理
- juery笔记常用代码
- dma_alloc_writecombine和dma_alloc_coherent的区别
- C99标准文法注释
- android笔记之自定义圆形ProgressBar
- Android4.X 的SIM卡信息的初始化过程
- 欢迎使用CSDN-markdown编辑器
- oracle ORA-01019错误解决
- 中间件学习——技术平台三步曲