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>  
  • 相关阅读:
    存储结构接收数组
    oracle数据库sql根据查看执行计划优化sql--走不走索引
    多线程--Thread
    java常用集合族谱
    设计模式之二 适配模式
    Tomcat优化问题
    设计模式之一
    C++虚函数表,虚表指针,内存分布
    设计模式
    linux环境下的时间编程
  • 原文地址:https://www.cnblogs.com/ppli/p/5606576.html
Copyright © 2011-2022 走看看