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>  
时间: 2024-10-15 23:05:38

springMVC全局Exception异常处理SimpleMappingExceptionResolver的相关文章

SpringMVC学习笔记四:SimpleMappingExceptionResolver异常处理

SpringMVC的异常处理,SimpleMappingExceptionResolver只能简单的处理异常 当发生异常的时候,根据发生的异常类型跳转到指定的页面来显示异常信息 ExceptionController.java 处理器 package com.orange.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.Requ

springMVC3学习(八)--全局的异常处理

在springMVC的配置文件中: <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="defaultErrorView"> <value>/error</value><!-- 表示当抛出异常但没有

SpringMVC中的异常处理集锦

1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大. 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的.下面将介绍使用Spring MVC统一处理异常的解决和实现过程. 2 分析 Spring MVC处理异常有3种方

2017.3.31 spring mvc教程(四)全局的异常处理

学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变化比较大的功能. spring mvc教程(四)全局的异常处理 1.SimpleMappingExceptionResolver 1 SimpleMappingExceptionResolver 的父类 : AbstractHandlerExceptionResolver 2 通过SimpleMap

SpringMVC全局文件上传类型限制【终极解决方案】

各位小伙伴们,有没有遇到这种情况,在信息安全日益受到各方重视的当下,白帽子越来越多,相应的作为开发人员的安全意识也得与日俱增.但是呢,总会有各种各种的原因,会出现全局性系统性的问题,你无法解决,或者无从下手.怎么办?没办法,只有回归本质. 今天分享一个SpringMVC全局文件上传类型限制终极解决方案,为那些还在迷茫该如何处理全局性文件上传漏洞的小伙伴送来一份小礼物.在阅读我的代码之前,请看下面的一篇关于SpringMVC文件上传的博文摘要.博文地址http://exceptioneye.ite

javax.servlet.ServletException: Servlet.init() for servlet springmvc threw exception

e'cipse中,项目没报错,正常启动,访问控制器时报错 javax.servlet.ServletException: Servlet.init() for servlet springmvc threw exception org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) org.apache.catalina.valves.ErrorReportValve.invok

Servlet.init() for servlet [springmvc] threw exception

项目还没开始做,就碰到那么多问题.. 报错一:/oa/news/%E6%A0%8F%E7%9B%AE%E7%AE%A1%E7%90%86.jsp 1.一开始是jsp的页面名称为中文,改了 2.接着仍然这样错误,我想可能没有重新加载,把target文件删掉解决了. 报错二:Artifact tlks: com.intellij.javaee.oss.admin.jmx.JmxAdminException: com.intellij.execution.ExecutionException: E:\

SpringMVC 全局异常处理

在 JavaEE 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大.SpringMvc 对于异常处理这块提供了支持,通过 SpringMvc 提供的全局异常处理机制,能够将所有类型的异常处从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护. 全局异常实现方式 Spring MVC

springMVC --全局异常处理(两种方式)

首先看springMVC的配置文件: <!-- 全局异常配置 start --> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <pro