【Java必学框架】超详细的SpringMVC异常处理器使用流程,带你一文搞懂

1.异常处理的思路

系统中异常包括两类:

  • 预期异常,通过捕获异常从而获取异常信息。
  • 运行时异常RuntimeException,通过规范代码开发、测试等手段减少运行时异常的发生。

使用SpringMVC处理异常的思路就是:系统的Dao、Service、Controller出现的异常都通过throws Exception一层一层向上抛出,最后由SpringMVC前端控制器交由异常处理器进行异常处理,如下图:

在这里插入图片描述

平时开发中我们喜欢通过try…catch来处理异常,但是这样的话代码量会蹭蹭往上涨。而使用SpringMVC的话,我们只需将异常使用Thorws关键字抛出,最终交由异常处理器处理。

2.异常处理器实现方式

我们有两种实现方式,可以按业务需求进行选择。

  • 使用SpringMVC提供的简单异常处理器SimpleMappingExceptionResolver
  • 实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器
2.1简单异常处理器SimpleMappingExceptionResolver

SpringMVC已经定义好了该类型转换器,在使用时可以根据项目情况进行相应异常与视图的映射配置

首先人为制造五种异常:

@Controller
public class ExceptionTest {
    @RequestMapping("/run1")
    public void run1() {
        System.out.println("抛出类型转换异常....");
        Object str = "zhangsan";
        Integer num = (Integer)str;
    }

    @RequestMapping("/run2")
    public void run2() {
        System.out.println("抛出除零异常....");
        int i = 1/0;
    }

    @RequestMapping("/run3")
    public void run3() throws FileNotFoundException {
        System.out.println("文件找不到异常....");
        InputStream in = new FileInputStream("C:/xxx/xxx/xxx.txt");
    }

    @RequestMapping("/run4")
    public void run4() {
        System.out.println("空指针异常.....");
        String str = null;
        str.length();
    }

    @RequestMapping("/run5")
    public void run5() throws MyException {
        System.out.println("自定义异常....");
        throw new MyException();
    }
}

创建一个自定义异常

public class MyException extends Exception {
}

配置简单映射异常处理器

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="defaultErrorView" value="error"></property>
    <property name="exceptionMappings">
        <map>
            <entry key="java.lang.NullPointerException" value="null"></entry>
            <entry key="venture.study.exception.MyException" value="mye"></entry>
        </map>
    </property>
</bean>

这里空指针异常和自定义异常分别会跳转到null视图与mye视图,也即null.jsp和mye.jsp。其他异常会跳转到error视图

我们访问/run1,/run2,/run3,跳转到默认异常视图页面,输出结果如下:

在这里插入图片描述

我们访问/run4,输出结果如下:

在这里插入图片描述

我们访问/run5,输出结果如下:

在这里插入图片描述

2.2自定义异常处理器

自定义异常处理器需要实现HandlerExceptionResolver接口

public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        //处理异常的代码实现
        //创建ModelAndView对象
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("exceptionPage");
        return modelAndView;
    }
}
<!--配置自定义异常处理器-->
<bean class="venture.study.exception.MyExceptionResolver"></bean>

再次访问/run1,跳转到exceptionPage视图

在这里插入图片描述

其实,简单异常处理器其实在日常开发中已经够用了,只要在配置文件中配置对应异常的视图就可以对我们遇到的运行时异常进行转发处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值