【SpringMVC】:异常处理

本文介绍了SpringMVC中处理异常的两种方法:使用内置的SimpleMappingExceptionResolver和自定义异常处理器。内置处理器可通过配置文件映射特定异常到指定视图,自定义处理器则能更灵活地处理各种异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、异常处理思路

在 Java 中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

如下图所示,系统的 dao 层、service 层还是 controller 层出现异常都通过throws Exception向上抛出,最后由 SpringMVC 前端控制器交由异常处理器进行异常处理。SpringMVC 提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。在了解了 SpringMVC 中的异常处理机制,下面就开始分析 SpringMVC 中的异常处理。

在这里插入图片描述

2、解决异常的两种思路

2.1、使用 SpringMVC 自带的简单异常处理器

SpringMVC 中自带了一个异常处理器叫SimpleMappingExceptionResolver,该处理器实现了HandlerExceptionResolver接口,全局异常处理器都需要实现该接口。我们要要使用这个自带的异常处理器,只需要在 springmvc.xml文件中配置该处理器:

<!-- springmvc提供的简单异常处理器 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
     <!-- 定义默认的异常处理页面 -->
    <property name="defaultErrorView" value="/WEB-INF/jsp/error.jsp"/>
    <!-- 定义异常处理页面用来获取异常信息的变量名,也可以不定义,默认名为exception --> 
    <property name="exceptionAttribute" value="ex"/>
    <!-- 定义需要特殊处理的异常,这是重要点 --> 
    <property name="exceptionMappings">
         <map>
             <!-- key 中表示异常类型  value 表示错误视图页面  -->
             <entry key="java.lang.ClassCastException" value="error"/>
             <!-- 还可以定义其他的自定义异常 -->
         </map>
     </property>
</bean>

这个异常处理就完成,在出现异常后,首选会在exceptionMappings中寻找是否有配置对应的异常处理,如果有则执行,如果没有则执行defaultErrorView默认的异常处理页面。

2.2 自定义异常处理器

自定义一个异常处理器需要实现 HandlerExceptionResolver接口,然后再配置文件中配置自定义异常处理器。

  • 创建异常处理器类实现HandlerExceptionResolver
    public class MyExceptionResolver implements HandlerExceptionResolver {
    
    @Override
    public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex) {
            //向前台返回错误信息
            ModelAndView modelAndView = new ModelAndView();
            //如果抛出的是 类型转换异常则执行
            if(ex instanceof ClassCastException) {
                modelAndView.addObject("info", "类型转换异常");
            } else {
                //如果抛出的不是类型转换异常则表示为其他异常
                modelAndView.addObject("info", "其他异常");
            }
            modelAndView.setViewName("error");
            return modelAndView;
        }
    }
    
  • 配置自定义异常处理器
    <bean id="exceptionResolver" class="MyExceptionResolver"/>
    

当然上述异常处理只是为了演示其用法,在具体开发中不会显示类型转换异常等信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值