程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> springMVC全局Exception異常處理SimpleMappingExceptionResolver,exceptionresolver

springMVC全局Exception異常處理SimpleMappingExceptionResolver,exceptionresolver

編輯:JAVA綜合教程

springMVC全局Exception異常處理SimpleMappingExceptionResolver,exceptionresolver


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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved