zoukankan      html  css  js  c++  java
  • SpringMvc异常处理

      SpringMvc通过HandlerExceptionResolver处理程序的异常,包括Handler映射、数据绑定、以及方法执行时发生的异常,SpringMvc提供的HandlerExceptionResolver的实现类如下:

    DispatcheServlet默认装配了的HandlerExceptionResolver:

       没有使用<mvc:annotation-driven/>配置:

    使用了<mvc:annotation-driven/>配置:

    ExceptionHandlerExceptionResolver

             主要处理Handler中用@ExceptionHandler注解定义的方法。

             @ExceptionHandler注解定义的方法优先级问题:例如发生的是NullPointerException,但是声明的异常有RuntimeException和Exception,此时会根据异常的最近继承关系找到继承深度最浅的那个@ExceptionHandler注解定义的方法,及标记了RuntimeException的方法。

    package com.seven.exceptionHandler;
    
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.servlet.ModelAndView;
    
    /**
     * Created by hu on 2016/4/4.
     */
    @ControllerAdvice
    public class SpringMvcTestExceptionHandler {
        @ExceptionHandler({ArithmeticException.class})
        public ModelAndView handleArithmeticException(Exception e){
            System.out.println("---->出现异常了:"+e);
            //转到逻辑名为error的视图
            ModelAndView modelAndView=new ModelAndView("error");
            modelAndView.addObject("exception",e);
            return modelAndView;
        }
    }

     ResponseStatusExceptionResolver

            在异常及异常的父类中找到@ResponseStatus注解,然后使用这个注解的属性进行处理。

    package com.seven.exceptionHandler;
    
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.ResponseStatus;
    
    /**
     * Created by hu on 2016/4/4.
     */
    @ResponseStatus(value = HttpStatus.FORBIDDEN,reason = "用户名和密码不匹配!")
    public class UserNameNotMatchPasswordException extends RuntimeException{
        /*
        * 当程序发生UserNameNotMatchPasswordException这个异常的时,
        * 由于触发的这个异常带有@ResponseStatus注解,因此会被ResponseStatusExceptionResolver解析,
        * 那么响应的状态是FORBIDDEN,代码是401,无权限。原因是 "用户名和密码不匹配!"
        * 一并返回给客户端
        * */
    }
    

    DefaultHandlerExceptionResolver

    对一些特殊的异常进行处理,比如以下的异常:

    SimpleMappingExceptionResolver

        如果希望所有异常进行同意的处理,可以使用SimpleMappingExceptionResolver,它将异常类名映射为视图名,即发生异常时使用对应的视图报告异常

           <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
                  <!--定义异常处理页面来获取异常信息的变量名,默认为exception-->
                  <property name="exceptionAttribute" value="ex"></property>
                  <property name="exceptionMappings">
                         <props>
                                <!--如果出现下面这个异常,就映射到error这个页面上-->
                                <prop key="java.lang.ArrayIndexOutOfBoundsException">error</prop>
                         </props>
                  </property>
           </bean>
    

      

     

  • 相关阅读:
    MVCCache2.应用程序缓存(Cache:1.输出缓存[2].应用程序缓存)
    接口和抽象类的区别和作用(功能、用途、好处)
    MVCCache1.输出缓存(Cache:[1].输出缓存2.应用程序缓存)
    JAVA中为什么要使用接口,继承接口不是还要重写方法吗?为什么不直接写那些方法呢?:::接口的最主要的作用是达到统一访问
    枚举的意义,用途,作用,用法,作用场景
    C++ compile multiple cpp and header files via I. cpp1.cpp cpp2.cpp o
    C++retrieve array via returned pointer,traverse the array pointer without the array size
    C++ pass array as pointer and sort in bubble
    C write and read file via FILE and open method in a+ or r mode
    C++ connection mysql and retrieve select sql result
  • 原文地址:https://www.cnblogs.com/hujingwei/p/5351495.html
Copyright © 2011-2022 走看看