Spring MVC 3.2 错误处理:ControllerAdvice 实现统一异常控制
"本文将介绍如何在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提供的一个强大的工具,它可以让我们在应用层面上集中管理异常处理,创建统一的错误反馈,提高用户体验。通过结合视图解析器的配置和自定义的异常处理器方法,我们可以确保任何未被捕获的异常都会被适当地处理并呈现给用户。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
jsp/error.jsp--
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
${message}
---ControllerAdviceMe 统一控制器
@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;
}
}
test java
@RequestMapping("/exceptionstest")
public String testException2() throws SQLException {
boolean exceptionFlag = true;
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 2
- 资源: 18
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展