SpringMVC的异常处理机制

前言

常见的异常处理方式有两种,一种是申明式异常,另外一种是通过try/catch方式直接对异常进行捕获,手动的对异常进行处理会较为繁琐,而且当服务器遇到未知的异常的时候,web端直接暴露错误码给用户也不太友好。针对这种情况,springmvc提出了统一的异常处理机制,开发人员不再需要手动的try/catch,而是通过异常处理机制来统一处理错误。下面就让我们一起看一下是怎么实现的吧。

一、使用springmvc定义好的SimpleMappingExceptionResolver

在没有配置异常处理器的时候,遇到没有捕获的未知异常,往往会出现这种情况


在spring-mvc.xml文件中,配置使用mvc的简单映射异常处理器

    <!-- 使用springmcv自带的简单映射异常处理器· -->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="defaultErrorView" value="error2"/>
        <property name="exceptionMappings">
            <map>
                <entry key="java.lang.NumberFormatException" value="error1"/>
                <entry key="com.xiaoming.exception.MyException" value="error3"/>
            </map>
        </property>
    </bean>

在map中定义了异常类对应映射的错误信息页面,如果异常不在定义的map映射中,则跳转到defaultErrorView定义的页面。

二、使用自定义异常处理器

异常处理步骤

  • 创建异常处理类,实现HandlerExceptionResolver接口
package com.xiaoming.util;

import com.xiaoming.exception.MyException;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyExceptionResolver implements HandlerExceptionResolver {
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView mav = new ModelAndView();
        if(e instanceof NumberFormatException){
            mav.addObject("info","NumberFormatException");
        }else if(e instanceof MyException){
            mav.addObject("info","MyException");
        }else{
            mav.addObject("info","OtherException");
        }
        mav.setViewName("error");
        return mav;
    }
}


  • 在spring-mvc.xml文件中注入这个自定义异常处理器
<bean id="exceptionResolver" class="com.xiaoming.util.MyExceptionResolver"></bean>

配置完后即可使用



posted @ 2020-10-23 16:50  moutory  阅读(9)  评论(0编辑  收藏  举报  来源