zoukankan      html  css  js  c++  java
  • Spring MVC的异常处理

    ExceptionHander注解

    用来定义一个一场处理的方法,用于处理在同一个Controller中的其他的方法抛出来的异常

    @RequestMapping("/exceptionHandler")
         public void testExceptionHander(){
              System.out.println("123");
              throw new MailSendException("123");
         }
    
         @ExceptionHandler(value = MailSendException.class)
         public String handleException(){
              System.out.println("空指针异常处理");
              return "error";
         }

    如果以想要吧异常信息显示到网页上,需要传入Exception的参数,但是这个参数不能被放到Model/Map里面,只能使用ModelandView来处理

    @ExceptionHandler(value = MailSendException.class)
         public ModelAndView handleException(Exception ex){
              ModelAndView modelAndView=new ModelAndView();
              modelAndView.setViewName("error");
              modelAndView.addObject("ex",ex);
              return modelAndView;
         }
    注解中如果不加上限定的参数,那么就是可以捕获本Controller中所有的异常

    这样写的话,这个异常处理方法,只能在本Controller中使用,要想全局使用,需要注解@ControllerAdvice

    这个注解应用在类上,这样类中的@EXceptionhandler就能应用到所有@RequestMapping注解的方法上,

    当出现异常的时候,首先在自己的Controller中找处理方法,找不到的话就去@ControllerAdvice中找处理方法。

    注意EXceptionhandler的精确度问题,出现异常之后,回去匹配最为精确描述的那个处理方法。

    ControllerAdvice的注解本身,就有Component的注解,注意要扫描到包的位置!

    ResponseStatusExceptionResolver——ResponseStatus注解

    这个注解对于自定义的异常很有用,在自定义的异常上添加这个注解,可以指定异常返回的状态码以及提示信息。

    如果放在方法上,就呵呵,无论方法是否出异常,都会跳转到错误页面(定制的),如果没有异常,方法会正常执行,但会跳转异常

    @ResponseStatus(code = HttpStatus.BAD_GATEWAY,reason = "测试ResponseStatus注解的异常提示信息")
    public class MyException extends ArrayIndexOutOfBoundsException {
    }

    SimpleMappingExceptionResolver

    用来全局处理异常,根据异常的类型,指定跳转到不同的页面去,并且自动将异常对象传入到指定页面的model中

      <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="exceptionMappings">
                <props >
                    <prop key="java.lang.NullPointerException">error</prop>
                    <!-- 这里可以继续指定 -->
                </props>
            </property>
            <!-- 对于没有指定映射的异常,统一跳转 -->
            <property name="defaultErrorView" value="defaulterror"/>
            <!-- 异常会被放到model中,默认的异常对象的名字是exception,这里个性化了一下  -->
            <property name="exceptionAttribute" value="ex"/>
        </bean>

    只需要在Spring配置文件中创建一个bean就可以了,指定异常处理的property,也可以指定默认的跳转位置

  • 相关阅读:
    python 关于文件操作
    python2 编码与解码
    Git系列(二) 冲突解决
    异步回调机制分析
    CSS盒子模型理解
    Git多人协同开发模型
    CSS连载控制背景与CSS精灵
    函数调用在回调,委托与事件在程序设计中的应用
    TFS与Git结合进行代码管理
    Git系列之(二)Git协议与工作协同
  • 原文地址:https://www.cnblogs.com/Coder-Pig/p/7327316.html
Copyright © 2011-2022 走看看