什么是SpringMVC的异常处理
Spring MVC提供了一种灵活的方式来处理Web应用程序中的异常。有多种方式可以处理异常,包括标准的Spring异常处理器和特殊的@ExceptionHandler方法。
以下是Spring MVC处理异常的几种方式:
- 使用Spring
@ControllerAdvice
注解:通过使用@ControllerAdvice,我们可以将所有的异常处理程序集中在一个地方。只需要在类上加上@ControllerAdvice注解,然后在类中添加一个或多个由@ExceptionHandler注解标记的方法。
- 然后使用Spring
@ExceptionHandler
注解:@ExceptionHandler注解提供了一种处理特定异常的方式。当控制器抛出此类异常时,这个方法就会被调用。
-
实现
HandlerExceptionResolver
接口:你可以创建一个实现了HandlerExceptionResolver接口的类来全局处理异常。这允许你在没有使用@ControllerAdvice或@ExceptionHandler时进行全局异常管理。 -
使用
SimpleMappingExceptionResolver
:这是一个实现了HandlerExceptionResolver接口的类,它允许你将特定的异常映射到视图名。
这些机制让开发者能够更好地管理和控制发生在应用程序中的错误和异常,提高用户体验,并允许对错误进行更好地记录和分析。
xml映射处理异常
在spring
的配置文件中加入以下代码:
xml
<!--配置异常处理-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!--异常映射-->
<property name="exceptionMappings">
<props>
<!--映射对应的异常,捕获到就跳转/WEB-INF/templates/error.html-->
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
<!--异常信息映射请求域-->
<property name="exceptionAttribute" value="ex"/>
</bean>
controller
添加测试类,添加error页面:
java
@RequestMapping("/test")
public String test() {
int i = 1 / 0;
return "hello world";
}
这边使用的是一个大佬的404页面,原地址:https://github.com/yansheng836/404pages/blob/master/WebRoot/2js-animate/2_1_on-the-sea/sea-404page.html
修改代码输出报错:
html
<span>Page not found</span><span>404</span><span th:text="${ex}"></span>
效果如下:
注解处理异常
tip:记得注释刚刚的代码,不然会冲突
1. 新建异常处理类
记得让组件能够扫描到这个包
2. 添加 @ControllerAdvice
注解
java
@ControllerAdvice
public class testExceptionHandler {
}
3. 异常处理方法上添加 @ExceptionHandler
,value设置为需要处理的异常
java
@ExceptionHandler(value = ArithmeticException.class)
public String arithmeticException() {
}
value 的值可以设置多个
value = {ex1.class, ex2.class, ex3.class}
4. 设置跳转地址
java
@ControllerAdvice
public class testExceptionHandler {
@ExceptionHandler(value = ArithmeticException.class)
public String arithmeticException() {
return "error";
}
}
5. Model参数获取异常请求域
java
@ControllerAdvice
public class testExceptionHandler {
@ExceptionHandler(value = ArithmeticException.class)
public String arithmeticException(Exception ex,Model model) {
model.addAttribute("ex",ex);
return "error";
}
}