Spring MVC项目中的异常处理详解

 更新时间:2022年06月06日 15:25:21   作者:郭尕  
在Web开发中 我们经常会需要处理各种异常,这篇文章主要给大家介绍了关于Spring MVC项目中异常处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

前言

我们在项目的开发中,难免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。

那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的 功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的。下面将介绍Spring MVC是如何处理异常的。

1. 基于配置的简单异常处理

在SpringMVC中拥有一套非常强大的异常处理机制,SpringMVC通过 HandlerExceptionResolver处理程序的异常,包括请求映射,数据绑定以及目标方法的执行时发生的异常。

SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:

HandlerExceptionResolver,该接口的实现类有:DefaultHandlerExceptionResolver和

SimpleMappingExceptionResolver,下面就来看看如何使用简单异常处理器来处理异常。

使用 Spring MVC 提供的简单异常处理器 SimpleMappingExceptionResolver

Spring MVC配置文件

<!--配置异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
        <!--ArithmeticException算术运算异常:是出现异常的运算条件时,抛出此异常-->
            <prop key="java.lang.ArithmeticException">error</prop>
        </props>
    </property>
    <property name="exceptionAttribute" value="e"/>
</bean>

注意:

properties的键表示处理器方法执行过程中出现的异常

properties的值表示若出现指定异常时,设置一个新的视图名称,跳转到指定页面

exceptionAttribute属性设置一个属性名,将出现的异常信息在请求域中进行共享

控制器方法

@RequestMapping("/testException")
public String testException(){
    System.out.println(1/0);
    return "success";
}

在该控制器方法中抛出一个算术运算异常,运行

2. 基于注解的全局异常处理

@ControllerAdvice:将当前类标识为异常处理的组件,是Spring提供的新注解,它是对Controller的增强,可对 controller中被 @RequestMapping注解的方法加一些逻辑处理;

@ExceptionHandler:用于设置所标识的方法处理的异常,@ExceptionHandler加在ControllerAdvice中,处理全局异常

ExceptionController 

@ControllerAdvice
public class ExceptionController {
	
    @ExceptionHandler(value = {ArithmeticException.class,NullPointerException.class})
    public String exception(Exception e, Model model){
        model.addAttribute("e",e);
        return "error";
    }
}

@ExceptionHandler的value值可以是数组,所以可以添加许多可能出现的异常;在该方法中
当出现算数运算异常或空指针异常就会跳转到我们自己设置的异常页面,并且展示异常信息。

error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>错误页面</title>
</head>
<body>
<h1>error</h1>
    ${e}
</body>
</html>

异常页面

总结 

到此这篇关于Spring MVC项目中异常处理的文章就介绍到这了,更多相关SpringMVC异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • intellij idea设置统一JavaDoc模板的方法详解

    intellij idea设置统一JavaDoc模板的方法详解

    这篇文章主要介绍了intellij idea设置统一JavaDoc模板的方法详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • MyBatis按时间排序方式

    MyBatis按时间排序方式

    这篇文章主要介绍了MyBatis按时间排序方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Lambda表达式下访问外部变量问题

    Lambda表达式下访问外部变量问题

    这篇文章主要介绍了Lambda表达式下访问外部变量问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java ArrayList 数组之间相互转换

    Java ArrayList 数组之间相互转换

    本文通过代码示例给大家讲解arraylist转化为数组,然后数组转化为arraylist的相关资料,感兴趣的朋友一起看看吧
    2015-11-11
  • Java开发框架spring实现自定义缓存标签

    Java开发框架spring实现自定义缓存标签

    这篇文章主要介绍了Java开发框架spring实现自定义缓存标签的详细代码,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • springboot 2.x整合mybatis实现增删查和批量处理方式

    springboot 2.x整合mybatis实现增删查和批量处理方式

    这篇文章主要介绍了springboot 2.x整合mybatis实现增删查和批量处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • SpringBoot 项目的创建与启动步骤详解

    SpringBoot 项目的创建与启动步骤详解

    这篇文章主要介绍了SpringBoot 项目的创建与启动,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • 实例解析Java的Jackson库中的数据绑定

    实例解析Java的Jackson库中的数据绑定

    这篇文章主要介绍了Java的Jackson库中的数据绑定,这里分为通常的简单数据绑定与全数据绑定两种情况来讲,需要的朋友可以参考下
    2016-01-01
  • Spring Boot 2和Redis例子实现过程解析

    Spring Boot 2和Redis例子实现过程解析

    这篇文章主要介绍了Spring Boot2发布与调用REST服务过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 通过实例解析传统jar包引用方式

    通过实例解析传统jar包引用方式

    这篇文章主要介绍了通过实例解析传统jar包引用方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论