前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >15-SpringMVC异常处理

15-SpringMVC异常处理

作者头像
Ywrby
发布2022-10-27 13:15:37
2240
发布2022-10-27 13:15:37
举报
文章被收录于专栏:Ywrby

SpringMVC异常处理

系统中异常主要包括两部分,[编译时异常与运行时异常] Spring,SpringMVC,前者可以通过捕获异常从而获取异常信息,后者主要通过规范代码格式,测试等手段减少异常出现

在开发过程中,系统的DAO层,SERVICE层和CONTROLLER层都有可能出现异常情况,这种情况下我们应该尽量将异常向上层抛出,最后将所有异常交由SpringMVC的前端控制器处理,其会利用异常处理器来进行异常处理

SpringMVC异常处理的两种方式

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

1. 使用SimpleMappingExceptionResolver

配置简单映射异常处理器
代码语言:javascript
复制
<!--配置简单映射异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <!--配置默认错误视图,指向error.jsp-->
    <property name="defaultErrorView" value="error"/>
    <!--异常映射,将指定报错映射到指定视图,一旦出现指定报错跳转到指定页面-->
    <property name="exceptionMappings">
        <map>
            <!--键为错误类,值为跳转视图-->
            <entry key="cn.ywrby.exception.MyException" value="error"/>
            <entry key="java.lang.ClassCastException" value="error"/>
        </map>
    </property>
</bean>
测试异常

产生异常的方法

代码语言:javascript
复制
@Service("exceptionService")
public class ExceptionServiceImpl implements ExceptionService {
    public void showError1(){
        System.out.println("抛出类型转换异常");
        Object str="Leslie";
        Integer integer=(Integer)str;
    }

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

    public void showError3() throws FileNotFoundException {
        System.out.println("抛出文件路径异常");
        InputStream in=new FileInputStream("C:/xxx/xxx/xxx.txt");
    }

    public void showError4(){
        System.out.println("抛出空指针异常");
        String str=null;
        str.length();
    }

    public void showError5() throws MyException {
        System.out.println("抛出自定义异常");
        throw new MyException();
    }
}

调用产生异常的方法

代码语言:javascript
复制
@Controller("exceptionController")
public class ExceptionController {

    @Autowired
    private ExceptionService service;

    @RequestMapping("/exception")
    public void testError(){
        service.showError1();
    }
}
实例结果

2. 自定义异常处理器

创建异常处理器类实现HandlerExceptionResolver
代码语言:javascript
复制
/**
 * 自定义异常处理器,实现HandlerExceptionResolver接口
 */
public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView modelAndView=new ModelAndView();
        //判断异常种类
        if(e instanceof MyException){
            modelAndView.addObject("info","自定义异常");
        }else if(e instanceof ClassCastException){
            modelAndView.addObject("info","类转换异常");
        }else{
            modelAndView.addObject("info","其他异常");
        }
        //设定跳转视图
        modelAndView.setViewName("error");
        return modelAndView;
    }
}
配置异常处理器
代码语言:javascript
复制
<!--配置自定义异常处理器-->
<bean class="cn.ywrby.resolver.MyExceptionResolver"/>
编写异常页面
代码语言:javascript
复制
<%--
  Created by IntelliJ IDEA.
  User: renboyu010214
  Date: 2021/3/17
  Time: 1:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Error1</title>
</head>
<body>
<h1>Error:${info}</h1>
</body>
</html>
测试页面跳转
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringMVC异常处理
    • SpringMVC异常处理的两种方式
      • 1. 使用SimpleMappingExceptionResolver
      • 2. 自定义异常处理器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档