zoukankan      html  css  js  c++  java
  • 每天学点SpringMVC-异常处理

    1. 第一步先写个Hello World

        1.1 编写一个抛出异常的目标方法

     @RequestMapping("/testException.do")
        public String testException(){
            int i = 1 / 0 ;
            return "index" ;
        }

        1.2 当前Controller中添加@ExceptionHandler标记方法

    @ExceptionHandler(value = {ArithmeticException.class})
        public ModelAndView handleArithException(Exception ex){
            ModelAndView mv = new ModelAndView("error") ;
            mv.addObject("ex",ex) ;
            return mv ;
        }

     1.3 加上error界面

     

        1.4 测试结果

       1.5 总结一下

             1)@ExceptionHandler标记的方法在目标方法发生对应的异常触发,传入的参数Exception即为对应的异常对象

             2)不能通过参数中添加Map的形式将异常对象传递的界面,需要用ModelAndView的形式实现

             3)优先级:优先在当前Controller中@ExceptionHandler标记的方法,如果有多个,谁标记的异常越接近,则选择谁,如果当前Controller没有匹配到,则在@ControllerAdvice标记的类中找@ExceptionHandler标记的方法

    2. @ResponseStatus注解能够实现目标异常产生时,反馈给client端指定的状态码跟信息

       2.1 构建目标异常并添加@ResponseStatus注解

    @ResponseStatus(value = HttpStatus.FORBIDDEN,reason = "test")
    public class TestException extends RuntimeException {
    }

      2.2 构建测试RequestMapper

     @RequestMapping("/testResponseStatus.do")
        public String testResponseStatus(){
            throw new TestException() ;
        }

       2.3 测试结果如下

        2.4 如果指定异常被ExceptionHandler捕获时,发生什么?

        1)在上述ExceptionHandler中添加TextException

       2)重新部署测试结果

    3. 可通过spring-mvc.xml配置ExceptionResolver实现指定异常发送跳转到指定页面

        3.1 定义指定异常

    public class TestDefaultException extends RuntimeException {
    }

        3.2 spring-mvc.xml中进行配置

    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="defaultErrorView" value="error"></property>
            <property name="exceptionAttribute" value="ex"/>
            <property name="exceptionMappings">
                <props>
                    <prop key="com.pawn.crud.exceptions.TestDefaultException">error</prop>
                </props>
            </property>
        </bean>

      3.3 测试

    @RequestMapping("/testDefaultException.do")
        public String testDefaultException(){
            throw new TestDefaultException() ;
        }

     3.4 有个小坑:指定的异常不能加@ResponseStatus注解,否则配置的ExceptionResolver会失效

    demo:https://github.com/705645051/demoCrud

  • 相关阅读:
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark RDD(Resilient Distributed Datasets)论文
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    【机器学习实战】第10章 K-Means(K-均值)聚类算法
    [译]flexbox全揭秘
  • 原文地址:https://www.cnblogs.com/xpawn/p/7594571.html
Copyright © 2011-2022 走看看