zoukankan      html  css  js  c++  java
  • springmvc之异常处理中ExceptionHanderExceptionResolver

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

    2、springmvc提供的HandlerExceptionResolver的常用实现类:

    • ExceptionHanderExceptionResolver
    • DefaultHanderExceptionResolver
    • ResponseStatusExceptionResolver
    • SimpleMappingExceptionResolver

    3、DispatchServlet默认装配HanderExceptionResolver

    在java中:

        @ExceptionHandler({RuntimeException.class})
        public ModelAndView handleArithmeticException2(Exception ex) {
            System.out.println("出异常了--->:"+ex);
            ModelAndView mv = new ModelAndView("error");
            mv.addObject("exception",ex);
            return mv;    
        }
        
        @ExceptionHandler({ArithmeticException.class})
        public ModelAndView handleArithmeticException(Exception ex) {
            System.out.println("出异常了:"+ex);
            ModelAndView mv = new ModelAndView("error");
            mv.addObject("exception",ex);
            return mv;    
        }
        
        @RequestMapping("/testExceptionHandlerExceptionReslover")
        public String testExceptionHandlerExceptionReslover(@RequestParam("i") Integer i) {
            System.out.println("result-->"+(10 / i));
            return "success";
        }

    index.jsp

    <a href="testExceptionHandlerExceptionReslover?i=10">testExceptionHandlerExceptionReslover</a>

    success.jsp

        <p>success</p>

    error.jsp

        <h4>error page</h4>
        ${exception}

    启动服务器之后:

    点击:

    将I=10改为i=0并刷新:

    在控制台可看到:

    说明:

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

    (2)在@ExceptionHandler方法的入参中不能传入Map,若希望将异常信息传到前端页面上,需要使用ModelAndView。

    (3)@ExceptionHandler方法标记的异常有优先级问题。

    (4)@ControllerAdvice:如果在当前Handler中找不到@ExceptionHandler方法标记的出现的异常,则会在@ExceptionHandler标记的类中查找@ExceptionHandler标记的方法来处理异常。

    比如我们新建一个java文件,在里面加入:

    package com.gong.springmvc.test;
    
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.servlet.ModelAndView;
    
    @ControllerAdvice
    public class HandleException {
        @ExceptionHandler({ArithmeticException.class})
        public ModelAndView handleArithmeticException(Exception ex) {
            System.out.println("出异常了:"+ex);
            ModelAndView mv = new ModelAndView("error");
            mv.addObject("exception",ex);
            return mv;    
        }
    }

    仍可以达到相同的效果。

  • 相关阅读:
    webrtc源码分析-视频发送流程
    webrtc源码分析-Api接口
    webrtc源码分析-线程任务管理
    webrtc源码分析- jitter delay计算详解
    傅里叶变换
    从贝叶斯到卡尔曼滤波
    sql---case...when...
    python---collections模块记录(defaultdict, namedtuple, ChainMap)
    宏判断是否为Excel打开,若不是则关闭表格
    Golang混淆
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12194453.html
Copyright © 2011-2022 走看看