• 每天学点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

  • 相关阅读:
    vue简单分屏(1,4,9,16),全屏,还需要调整
    vue 中的Vuex实践
    常用工具类
    java Log日志规范
    spring中对象的注入方式
    不恰当的update语句使用主键和索引导致mysql死锁
    JPA规范及其它持久层框架
    webservice基本功能介绍
    Activiti工作流(二)之常用操作
    Activiti工作流(一)之基本操作介绍
  • 原文地址:https://www.cnblogs.com/xpawn/p/7594571.html
Copyright © 2020-2023  润新知