继承了SimpleMappingExceptionResolver
贴上代码
/** * 对controller异常进行全局处理 * 区分了对普通请求和ajax请求的异常处理,普通请求返回到配置的errorCode页面,或者返回到指定的页面 * @author * */ public class CustomException extends SimpleMappingExceptionResolver { private final transient Logger logger = LoggerFactory.getLogger(getClass()); @Override protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { String viewName = determineViewName(ex, request); if (viewName != null) {// JSP格式返回 //增加普通提交返回到自己页面errorPage String errorPage = String.valueOf(request.getAttribute("errorPage")); //回到自己的页面 if(StringUtils.isNotBlank(errorPage)){ viewName = errorPage; } if (!(request.getHeader("accept").indexOf("application/json") > -1 || (request .getHeader("X-Requested-With") != null && request .getHeader("X-Requested-With").indexOf("XMLHttpRequest") > -1))) { // 如果不是异步请求 // Apply HTTP status code for error views, if specified. // Only apply it if we're processing a top-level request. Integer statusCode = determineStatusCode(request, viewName); if (statusCode != null) { applyStatusCodeIfPossible(request, response, statusCode); } return getModelAndView(viewName, ex, request); } else {// JSON格式返回 try { Map<String, Object> jsonMap = new HashMap<String, Object>(); // 返回是错误 jsonMap.put(BaseController.AJAX_RESULT, false); jsonMap.put(BaseController.RESULT_MESSAGE, ex.getMessage()); response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = response.getWriter(); writer.write(JSON.toJSONString(jsonMap)); writer.close(); } catch (Exception e) { logger.error("doResolveException", "系统异常!", e); } return null; } } else { return null; } } }
spring.xml配置
<bean class="cn.tomcat.quickstart.exception.CustomException"> <!-- 定义默认的异常处理页面,当该异常类型的注册时使用 --> <property name="defaultErrorView" value="error"></property> <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception --> <property name="exceptionAttribute" value="ex"></property> <!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值 --> <property name="exceptionMappings"> <props> <prop key="IOException">error/ioexp</prop> <prop key="java.sql.SQLException">error/sqlexp</prop> </props> </property> </bean>