目录
2 通过 SimpleMappingExceptionResolver 实现
3 通过接口 HandlerExceptionResolver 实现
4 通过 @ExceptionHandler 注解实现(推荐)
在 SpringMVC中,异常处理器(Exception Handler)用于处理应用程序中发生的异常。SpringMVC 提供的异常处理主要有以下三种方式:
SimpleMappingExceptionResolver 异常处理器是 SpringMVC 定义好的异常处理器,具有以下特点。
在 SpingMVC 的配置文件中配置 SimpleMappingExceptionResolver 异常处理器
- <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" id="exceptionResolver">
-
- <property name="exceptionAttribute" value="exception">property>
-
- <property name="exceptionMappings">
- <props>
-
-
-
- <prop key="java.lang.ArithmeticException">show-messageprop>
- <prop key="java.lang.RuntimeException">show-runtime-messageprop>
- <prop key="java.lang.Exception">show-exception-messageprop>
- props>
- property>
-
- <property name="defaultErrorView" value="error">property>
- bean>
模拟异常的控制方法
- @Controller
- public class ExceptionController {
- @RequestMapping("/exception")
- public void test() {
- // 触发 ArithmeticException 异常
- int result = 1 / 0;
- }
- }
show-message.jsp
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>异常信息页面title>
- head>
- <body>
- <h1>系统信息h1>
- 异常对象:${requestScope.exception}<br/>
- 异常消息:${requestScope.exception.message}<br/>
- body>
- html>
执行结果
自定义异常处理器类
- public class CustomExceptionHandler implements HandlerExceptionResolver {
- @Override
- public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
- Exception ex) {
- // 处理异常的逻辑
- // 可以设置错误视图、返回错误代码、记录异常信息等
- ModelAndView modelAndView = new ModelAndView("show-message");
- modelAndView.addObject("exception", ex);
- return modelAndView;
- }
- }
在 SpringMVC 配置文件中配置异常处理器
<bean class="com.controller.CustomExceptionHandler">bean>
奇怪了,Exception exception 有 getMessage() 方法,没有 exception.message,结果没报错
@ControllerAdvice 注解是 Spring Framework 中的一个注解,用于标识一个类为全局的控制器 advice (控制器增强)。
使用 @ControllerAdvice 注解的类可以提供以下功能:
注:使用 @ExceptionHandler 注解在 @Controller 类中定义的异常处理方法,只能作用于该类,无法处理全局异常。
- // 这个注解表示当前类是一个异常映射类
- @ControllerAdvice
- public class MyException {
-
- // 在@ExceptionHandler注解中指定异常类型
- @ExceptionHandler(value = {RuntimeException.class, ArithmeticException.class})
- public ModelAndView exceptionMapping(Exception exception) {// 方法形参位置接收SpringMVC捕获到的异常对象
-
- // 可以将异常对象存入模型;将展示异常信息的视图设置为逻辑视图名称
- ModelAndView modelAndView = new ModelAndView();
- modelAndView.addObject("exception", exception);
- modelAndView.setViewName("show-message");
- // 打印一下信息
- System.out.println(exception.getMessage());
- return modelAndView;
- }
- }