繼承了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>