Skip to content
Go back

15-SpringMVC异常处理

Published:  at  07:23 AM

SpringMVC异常处理

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

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

SpringMVC异常处理的两种方式

1. 使用SimpleMappingExceptionResolver

配置简单映射异常处理器

    <!--配置简单映射异常处理器-->
    <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>

测试异常

产生异常的方法

@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();
    }
}

调用产生异常的方法

@Controller("exceptionController")
public class ExceptionController {

    @Autowired
    private ExceptionService service;

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

实例结果

2. 自定义异常处理器

创建异常处理器类实现HandlerExceptionResolver

/**
 * 自定义异常处理器,实现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;
    }
}

配置异常处理器

    <!--配置自定义异常处理器-->
    <bean class="cn.ywrby.resolver.MyExceptionResolver"/>

编写异常页面

<%--
  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>

测试页面跳转


Suggest Changes

Previous Post
16-MyBatis概述
Next Post
14-SpringMVC拦截器