springMVC对全局异常的统一处理

未分类 发表评论

使用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;
	}
	
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

昵称 *