Spring MVC 3.2 错误处理:ControllerAdvice 实现统一异常控制

4星 · 超过85%的资源 需积分: 35 11 下载量 37 浏览量 更新于2024-09-11 收藏 1KB TXT 举报
"本文将介绍如何在Spring MVC 3.2中使用`ControllerAdvice`进行错误统一控制,创建一个全局的错误处理页面,以便在应用程序出现异常时提供一致的反馈。我们将探讨`ControllerAdvice`注解的作用,以及如何定义一个异常处理器方法来返回自定义的错误视图。" 在Spring MVC中,`ControllerAdvice`是一个用于定义全局异常处理策略的注解。它允许开发者创建一个或多个控制器顾问类,这些类会捕获所有控制器中抛出的异常,并执行相应的处理逻辑。这样可以确保应用程序在遇到错误时,能够返回一个一致的、用户友好的错误页面,而不是显示未经处理的堆栈跟踪。 首先,我们需要配置Spring MVC的视图解析器。在给出的配置中,我们使用了`InternalResourceViewResolver`来解析视图。`prefix`属性设置为"/WEB-INF/jsp/",表示视图路径的前缀;`suffix`属性设置为".jsp",表示视图文件的后缀。这样,当请求"error"视图时,Spring MVC会查找"/WEB-INF/jsp/error.jsp"这个JSP文件。 接着,我们创建一个带有`@ControllerAdvice`注解的类,这个类中的方法将会捕获并处理所有的异常。例如: ```java @ControllerAdvice public class ControllerAdviceMe { @ExceptionHandler(Exception.class) public ModelAndView handleException(Exception exception) { ModelAndView andView = new ModelAndView(); andView.addObject("message", "Exception~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + exception.getMessage()); andView.setViewName("error"); return andView; } } ``` 在这个例子中,`@ExceptionHandler(Exception.class)`注解表明`handleException`方法将处理所有继承自`Exception`的异常。方法体内部,我们创建了一个`ModelAndView`对象,向模型中添加了一个名为"message"的属性,其值包含了异常信息。然后,我们设置了视图名为"error",这与视图解析器配置中的前缀和后缀结合,将会导向到"/WEB-INF/jsp/error.jsp"页面。 为了测试这个异常处理机制,我们可以创建一个故意抛出异常的控制器方法: ```java @RequestMapping("/exceptionstest") public String testException2() throws SQLException { boolean exceptionFlag = true; if (exceptionFlag) { throw new SQLException(); } return "error"; } ``` 在这个`testException2`方法中,如果`exceptionFlag`为真,我们抛出一个`SQLException`。由于这个异常会被`ControllerAdviceMe`中的`handleException`方法捕获,因此会返回"error"视图,显示我们在`ModelAndView`中设置的错误信息。 总结来说,`ControllerAdvice`是Spring MVC提供的一个强大的工具,它可以让我们在应用层面上集中管理异常处理,创建统一的错误反馈,提高用户体验。通过结合视图解析器的配置和自定义的异常处理器方法,我们可以确保任何未被捕获的异常都会被适当地处理并呈现给用户。