Spring MVC提供了一种灵活的方式来处理Web应用程序中的异常。有多种方式可以处理异常,包括标准的Spring异常处理器和特殊的@ExceptionHandler方法。
以下是Spring MVC处理异常的几种方式:
@ControllerAdvice
注解:通过使用@ControllerAdvice,我们可以将所有的异常处理程序集中在一个地方。只需要在类上加上@ControllerAdvice注解,然后在类中添加一个或多个由@ExceptionHandler注解标记的方法。@ExceptionHandler
注解:@ExceptionHandler注解提供了一种处理特定异常的方式。当控制器抛出此类异常时,这个方法就会被调用。实现HandlerExceptionResolver
接口:你可以创建一个实现了HandlerExceptionResolver接口的类来全局处理异常。这允许你在没有使用@ControllerAdvice或@ExceptionHandler时进行全局异常管理。
使用SimpleMappingExceptionResolver
:这是一个实现了HandlerExceptionResolver接口的类,它允许你将特定的异常映射到视图名。
这些机制让开发者能够更好地管理和控制发生在应用程序中的错误和异常,提高用户体验,并允许对错误进行更好地记录和分析。
在spring
的配置文件中加入以下代码:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.ArithmeticException">errorprop>
props>
property>
<property name="exceptionAttribute" value="ex"/>
bean>
controller
添加测试类,添加error页面:
@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
修改代码输出报错:
<span>Page not foundspan><span>404span><span th:text="${ex}">span>
效果如下:
tip:记得注释刚刚的代码,不然会冲突
记得让组件能够扫描到这个包
@ControllerAdvice
注解@ControllerAdvice
public class testExceptionHandler {
}
@ExceptionHandler
,value设置为需要处理的异常@ExceptionHandler(value = ArithmeticException.class)
public String arithmeticException() {
}
value 的值可以设置多个
value = {ex1.class, ex2.class, ex3.class}
@ControllerAdvice
public class testExceptionHandler {
@ExceptionHandler(value = ArithmeticException.class)
public String arithmeticException() {
return "error";
}
}
@ControllerAdvice
public class testExceptionHandler {
@ExceptionHandler(value = ArithmeticException.class)
public String arithmeticException(Exception ex,Model model) {
model.addAttribute("ex",ex);
return "error";
}
}