SpringMVC听课笔记(十四:异常处理)

1. SpringMVC通过HandlerExceptionResolver处理程序的异常,包括Handler映射,数据绑定以及目标方法执行时发生的异常

2.SpringMVC提供的HandlerExceptionResolver的实现类:(标注红×的已被废弃)

  

     

  -- 其中被SpringMVC默认装配的

    

 

 

3. ExceptionHandlerExceptionResolver

  -- 在@ExceptionHandler 方法的入参中可以加入Exception类型的参数,该参数即对应发生的异常对象

  -- 在@ExceptionHandler方法的入参中不能传入Map。若希望把异常信息传到页面上,需要使用ModelAndView作为返回值

  -- @ExceptionHandler方法标记的异常有优先级问题。优先抛出距离自己近的父类

  -- @ControllerAdvice  :如果在当前方法找不到@ExceptionHandler标记的方法,则去@ControllerAdvice 标记的类中寻找相应的方法

@ControllerAdvice
public class ExceptionHandlerHandler {

    @ExceptionHandler(value= {RuntimeException.class})
    public ModelAndView testExceptionHandler2(Exception ex) {
        System.out.println("[RuntimeException]出异常了...");
        System.out.println(ex);
        ModelAndView mv = new ModelAndView("error");
        mv.addObject("exception", ex);
        return mv;
    }
    
    @ExceptionHandler(value= {ArithmeticException.class})
    public ModelAndView testExceptionHandler(Exception ex) {
        System.out.println("[ArithmeticException]出异常了...");
        System.out.println(ex);
        ModelAndView mv = new ModelAndView("error");
        mv.addObject("exception", ex);
        return mv;
    }
}

 

4. ResponseStatusExceptionResolver

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

  -- 定义一个@ResponseStatus注解修饰的异常类

  -- 若在处理器方法中抛出了上述异常:若ExceptionHandlerExceptionResolver不解析异常。由于触发的异常 UnauthorizedException带有@ResponseStatus注解。因此会被ResponseStatusExceptionResolver解析到。最后响应HttpStatus.UNAUTHORIZED代码给客户端。HttpStatus.UNAUTHORIZED代表响应码401,无权限。关于其他响应码可参考HttpStatus枚举类型源码

 

5. DefaultHandlerExceptionResolver

  -- 对一些特殊异常进行处理,具体可参看源码,比如

    

 

6.SimpleMappingExceptionResolver

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

  -- SimpleMappingExceptionResolver会在requestScope请求域中放入属性“exception” 来对应所抛出的异常

    可通过exceptionAttribute更改属性名

    

 

  -- 若exceptionMappings 的prop的Key 为空时,将映射所有异常

    

 

posted @ 2019-08-12 11:49  嘿boom  阅读(153)  评论(0编辑  收藏  举报