欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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