springMVC对全局异常的统一处理 博客分类: SSH springMVC异常ajaxhttp
程序员文章站
2024-03-25 18:21:04
...
使用springMVC框架时,因为前台的请求有些是ajax,有些是请求一个页面.而如果这些请求执行过程中有异常没有catch,会向前台页面抛出.url响应为500,可能也会将异常信息抛到前台,这既不安全也不规范.
使用如下方式即可完美解决.既可以在后台记录错误的堆栈log.对前端的ajax请求或页面请求,都可以有比较好的响应处理.
<!-- 全局异常处理.--> <bean id="exceptionHandler" class="com.novelbio.web.handler.ExceptionHandler"/>
异常处理类
package com.novelbio.web.handler; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.shiro.web.util.WebUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver; /** * 全局异常处理类.对后台直接抛往前台页面的异常进行封装处理. * * @author fans.fan *@date 2015年12月4日 */ public class ExceptionHandler extends SimpleMappingExceptionResolver { private static final Logger logger = LoggerFactory.getLogger(ExceptionHandler.class); @Override protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { ModelAndView modelAndView = super.doResolveException(request, response, handler, ex); String url = WebUtils.getPathWithinApplication(request); logger.error("controller error.url=" + url, ex); if (modelAndView == null) { modelAndView = new ModelAndView("/error/error"); modelAndView.addObject("error."); } return modelAndView; } }