• 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 为空时,将映射所有异常

        

  • 相关阅读:
    转 oracle dual表
    笑话收集
    ls指令排序
    oracle中的连接
    linux系统磁盘突然满了解决方案
    转 Oracle temp空间管理
    11个JavaScript颜色选择器插件
    C#部分正则判断
    Script Encoder:screnc.exe加密解密
    JavaScript Tween算法及缓动效果
  • 原文地址:https://www.cnblogs.com/heyboom/p/11338837.html
Copyright © 2020-2023  润新知