springMVC异常处理的知识点+异常处理案例

本文详细介绍了SpringMVC中的异常处理,包括异常介绍、处理方式和实战案例。通过SimpleMappingExceptionResolver、HandlerExceptionResolver接口自定义处理及@ExceptionHandler注解的应用,展示了如何对预期异常和运行时异常进行有效管理。案例涵盖了不同类型的异常处理场景,帮助开发者深入理解SpringMVC的异常处理机制。
摘要由CSDN通过智能技术生成

springMVC异常处理的知识点+异常处理案例

异常介绍:

我们知道系统中的异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试等手段减少运行时异常的发生

在SpringMVC处理异常的方式为:将系统的Dao、Service、Controller出现的异常都通过throws Excepton 向上抛出,最后由SpringMVC前端控制器交由异常处理器进行异常处理

如下图所示:

在这里插入图片描述

异常处理:

在SpringMVC中异常处理有三种方法:

**第一种:**Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver

<!--配置mvc提供的默认异常处理器:simpleMapperExceptionResolver-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="defaultErrorView" value="error"></property><!--表示所有没有指定的异常,都跳转到异常处理页面error-->
    <property name="exceptionAttribute" value="ex"></property> <!--表示异常处理页面中访问的异常对象变量名是ex-->
    <!-- 异常映射exceptionMappings表示映射的异常,接受参数是一个Properties,key是异常类名,value是处理异常的页面-->
    <property name="exceptionMappings">
        <map>
            <entry key="NullPointerException" value="error"></entry>
            <entry key="ClassCastException" value="error"></entry>
        </map>
    </property>
</bean>

**第二种:**实现Spring的异常处理接口HandlerExceptionResolver 自定义的异常处理器

①创建异常处理器类实现HandlerExceptionResolver

public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
    //处理异常的代码实现
    //创建ModelAndView对象
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("exceptionPage");
    return modelAndView;
    }
}

②配置异常处理器

<bean id="exceptionResolver" class="com.exception.MyExceptionResolver"/>

③编写异常页面:exceptionPage

**第三种方法:**使用@ExceptionHandler注解实现异常处理;

使用方法有两种:

​ 1.在可能出现异常的Controller层进行异常处理,也就是在同一个类中进行异常处理:@Controller+@ExceptionHandler

@Controller
@RequestMapping("/testController")
public class TestController {
 
    @RequestMapping("/demo1")
    @ResponseBody
    public Object demo1(){
        int i = 1 / 0;
        return new Date();
    }
 
    @ExceptionHandler({RuntimeException.class})
    public ModelAndView fix(Exception ex){
        System.out.println("do This");
        return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));
    }
}

注意事项:

1.一个Controller下多个@ExceptionHandler上的异常类型不能出现一样的,否则运行时抛异常.

​ Ambiguous @ExceptionHandler method mapped for;

2.@ExceptionHandler下方法返回值类型支持多种,常见的ModelAndView,@ResponseBody注解标注, ResponseEntity等类型都OK.

2.全局级别处理:@ControllerAdvice+@ExceptionHandler

@ControllerAdvice
public class GlobalController {
 
    @ExceptionHandler(RuntimeException.class)
    public ModelAndView fix1(Exception e){
        System.out.println("全局的异常处理器");
        ModelMap mmp=new ModelMap();
        mmp.addAttribute("ex",e);
        return new ModelAndView("error",mmp);
    }
}

用法说明: 与第一种方式用法相同,返回值支持ModelAndView,@ResponseBody等多种形式.

异常处理案例

上面我们已经了解了SpringMVC的三种方法,下面我们分别用上面的方法来做几个案例吧!

第一个案例:使用SpringMVC提供的方法

第一步:创建一个maven项目:略

第二步:在pom.xml中添加以下的依赖或插件坐标:

 	<build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/</path>
                    <uriEncoding>UTF-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值