zoukankan      html  css  js  c++  java
  • springMVC全局Exception异常处理SimpleMappingExceptionResolver

    继承了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>  
  • 相关阅读:
    HDU2027 统计元音 一点点哈希思想
    湖南工业大学第一届ACM竞赛 数字游戏 字符串处理
    湖南工业大学第一届ACM竞赛 我素故我在 DFS
    HDU3293sort
    HDU2082 找单词 母函数
    HDU1018 Big Number 斯特林公式
    湖南工业大学第一届ACM竞赛 分糖果 位操作
    UVA 357 Let Me Count The Ways
    UVA 147 Dollars
    UVA 348 Optimal Array Multiplication Sequence
  • 原文地址:https://www.cnblogs.com/ppli/p/5606576.html
Copyright © 2011-2022 走看看