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,也可以指定默认的跳转位置

posted @ 2017-08-09 19:37  Zview  阅读(204)  评论(0编辑  收藏  举报