在开发过程中一个项目可以要抛出很多很多的异常,这对于用户来说非常地不方便,而且非常地不安全,特别容易导致用户信息地泄露。在SpringMVC中有一种全局异常管理方法,这种方法收集项目中存在所有地异常,以保证项目正常地运行并且不会出现差错。
注意:本次博客使用的案例还是通过文件上传为基础案例,来演示全局异常管理。
文件上传讲解如果有疑惑的地方可以去了解
定义一个类:实现项目中全局异常管理
package exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice //增强的controller类,多用于全局数据地处理
public class CT_Exception {
@ExceptionHandler(Exception.class) //异常处理注解:参数为各种异常类,Exception.class是异常的父类,是所有异常的集合,如果参数定义为它,它可以接收项目中的所有的异常,无论哪种异常都可以进行管理
public ModelAndView exception(Exception e){
ModelAndView modelAndView = new ModelAndView("error");
modelAndView.addObject("error",e.getMessage());
return modelAndView;
}
}
创建一个Html文件来,将后端的异常问题打印在前端显示器上
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>出错了</h1>
出错原因:${error}
</body>
</html>
配置SpringMVC的配置文件,配置文件上传的大小不能超过1KB
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 创建组件扫描功能-->
<context:component-scan base-package="fileupload_demo1"></context:component-scan>
<mvc:annotation-driven/>
<mvc:resources mapping="/**" location="/"></mvc:resources>
<!-- <bean class="org.springframework.web.multipart.support.StandardServletMultipartResolver" id="multipartResolver"></bean>-->
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver" >
<!-- 上传的单个文件大小,设置单文件大小不能超过1KB-->
<property name="maxUploadSizePerFile" value="1024"/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="modelAndView">
<property name="prefix" value="/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
关于框架中的控制器,web.xml 和pomxml中的配置与上面哪个链接中配置相同,如果不会可以去了解以下
项目展示:
选中一个大于1KB的文件,点击提交
显示出错的原因,是因为文件大于1KB导致报错,这就是全局异常管理
注意:我们不光把异常管理设置成全局异常管理,我们还可以设置单一的异常管理,只需要将前边创建的异常管理的类中的参数修改以下即可
package exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice //增强的controller类,多用于全局数据地处理
public class CT_Exception {
@ExceptionHandler(Exception.class) //异常处理注解:参数为各种异常类,Exception.class是异常的父类,是所有异常的集合,如果参数定义为它,它可以接收项目中的所有的异常,无论哪种异常都可以进行管理
public ModelAndView exception(Exception e){
ModelAndView modelAndView = new ModelAndView("error");
modelAndView.addObject("error",e.getMessage());
return modelAndView;
}
}
其中 @ExceptionHandler(Exception.class) 为定义显示异常的参数因素,可以修改其中的异常类型,但是有一点注意,我们修改参数类型,那么只有当项目中出现与定义的参数类型一致的异常才会显示出来,当出现其他的异常则不会被这个异常管理类所侦测到。