Spring 3 MVC异常处理程序
今天的博客探讨了使用@ ExceptionHandler批注创建简单的Spring 3 servlet异常处理程序的场景。 尽管您可能在此之前就已经看到了它,但它为我提供了一个很好的起点。在本演示中,我创建了一个简单的Spring 3 MVC webapp( 1),其中主页( home.jsp )向不稳定的控制器类发出请求引发异常( ExceptionDemoController )
/*** Whoops, throw an IOException*/@RequestMapping(value = "/ioexception", method = RequestMethod.GET)public String throwIoException(Locale locale, Model model) throws IOException {logger.info("This will throw an IOExceptiom");boolean throwException = true;if (throwException) {throw new IOException("This is my IOException");}return "home";}
上面的不稳定控制器代码是生成错误的第一步。 这个想法是应该让用户返回我们的主页,但是在处理用户请求的过程中,它抛出了一个简单的IOException 。 一旦引发,此方法将捕获异常:
/*** Catch IOException and redirect to a 'personal' page*/@ExceptionHandler(IOException.class)public ModelAndView handleIOException(IOException ex) {logger.info("handleIOException - Catching: " + ex.getClass().getSimpleName());return errorModelAndView(ex);}/*** Get the users details for the 'personal' page*/private ModelAndView errorModelAndView(Exception ex) {ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("error");modelAndView.addObject("name", ex.getClass().getSimpleName());modelAndView.addObject("user", userDao.readUserName());return modelAndView;}
设置起来非常简单,您需要做的就是添加:
@ExceptionHandler(IOException.class)
…对于方法签名,等等,您已经完成了…这就是简单的工作。
这里有一些值得注意的地方:首先,使用
@ExceptionHandler(IOException.class)
…将遵守通常的例外处理合同。 这意味着上述方法不仅将捕获所有IOExceptions ,还将捕获作为IOException子类的所有异常; 因此,如果我的throwAnException (..)方法抛出FileNotFoundException,它仍然会被我的handleIOException (...)方法捕获。
其次,有一组非常灵活但最终有限的方法签名,可用于异常处理程序方法。 完整的文档由Spring的JavaDoc提供 ,但总而言之,您可以设计一个签名,该签名包含任意顺序的以下任何输入参数:
- 异常或其子类之一
- ServletRequest或HttpServletRequest
- ServletResponse或HttpServletResponse
- HttpSession
- WebRequest或NativeWebRequest
- 语言环境
- InputStream或其子类之一来访问请求的内容
- OutputStream或其子类之一来访问响应的内容
- 读者或其子类别之一
- 作家或其子类别之一
方法签名还必须具有以下返回类型之一:
- 模型和视图
- 模型
- 地图
- 视图
- 字符串–解释为视图名称
- 无效,但前提是该方法直接写入响应对象
所有这些在任何情况下都足以满足任何情况。
使用@ ExceptionHandler使您能够执行针对不同错误情况的细粒度异常处理。 在示例代码的情况下,我创建了一个新的ModelAndView对象,并用用户名填充该对象,以便亲自告诉他(她)系统丢失了他们的文档。 有人可能会说这是一个限制,因为@ExceptionHandler的粒度是如此之细,以致您只能捕获包含@ExceptionHandler注释方法的控制器抛出的异常 。 我不同意,如果您想在一个地方捕获多个控制器抛出的异常,那么该技术不适合您,您应该考虑使用SimpleMappingExceptionResolver 。
实施错误处理时要考虑很多因素,例如:如果错误处理程序中存在错误,会发生什么? 您应该使用粗粒度还是细粒度异常处理程序? 如何设置HTTP状态代码? 因此,接下来的几篇博客将进一步研究错误处理,演示如何将多个异常类分配给单个@ExceptionHandler以及如何将异常处理程序符号与@ResponseStatus结合起来以微调服务器的HTTP状态代码,并且可能还会更多……
参考:来自JCG合作伙伴的 Spring 3 MVC异常处理程序 调试队长博客的 Roger Hughes。
- 完整的Webapp示例可在以下位置获得:
git://github.com/roghughe/captaindebug.git - 请参阅Spring文档以获取参考资料。
翻译自: https://www.javacodegeeks.com/2012/02/spring-3-mvc-exception-handlers.html
Spring 3 MVC异常处理程序相关推荐
- spring mvc异常统一处理(ControllerAdvice注解)
spring mvc异常统一处理(ControllerAdvice注解) 参考文章: (1)spring mvc异常统一处理(ControllerAdvice注解) (2)https://www.cn ...
- spring mvc 异常统一处理方式
spring mvc 异常统一处理方式 参考文章: (1)spring mvc 异常统一处理方式 (2)https://www.cnblogs.com/xd502djj/archive/2012/09 ...
- Spring MVC异常统一处理(异常信息的国际化,日志记录)
JAVA EE项目中,不管是对底层的数据操作,还是业务层的处理过程,还是控制层的处理,都不可避免的会遇到各种可预知的(业务异常主动抛出).不可预知的异常需要处理.一般dao层.service层的异常都 ...
- Spring 3 MVC深入研究
前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了.Spring3 MVC结构简单,应了那句话简单就是美,而且他 ...
- Spring Web MVC(一)
概述 Spring Web MVC框架的特点 五大核心组件 编程步骤 五大核心组件 DispatcherServlet前端控制器 WebApplicationContext中特殊的bean 处理过程 ...
- Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例
Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例 转自:通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例 ...
- 多个切点 boot spring_全网独家Spring/Cloud/MVC/Boot,脑图+面试+进阶,就问你服不服?...
近期搜刮了一些Spring全家桶系列的思维脑图.经典面试题和进阶学习的PDF笔记(非常nice),Spring+SpringCloud+SpringMVC+SpringBoot,一个都没落下全都有!一 ...
- Spring Web MVC是什么
2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...
- spring框架mvc框架_Spring的MVC测试框架入门–第1部分
spring框架mvc框架 最新推出的主要Spring框架是Spring MVC测试框架,Spring Guys声称它是"一流的JUnit支持,可通过流畅的API测试客户端和服务器端Spri ...
最新文章
- Tomcat常见问题 (配置)及解决方法
- C++编程风格(一)
- 计算机vb选择题题题库,2013计算机二级VB真考选择题题库(4
- OpenCASCADE绘制测试线束:性能评估命令之VDrawSphere
- How to use price determination in Quotation scenario
- swiftui_SwiftUI的混合包
- “工业互联网平台“将成为工业制造企业的标配
- 【2018.3.17】模拟赛之二-ssl1862jzoj1366 删数【区间dp】
- javaweb调用python算法_请教怎么用java远程调用python? 多谢
- 苹果电脑 Mac OS X 系统诞生的故事和发展历史
- dj鲜生-08-用户注册的功能-上-实现注册的主逻辑和其本的验证功能-伴随着调试
- Flutter Button 图文分析、效果浏览
- 输入特定字符和只能输入数字。
- Segmentation and Paging
- C语言小游戏---扫雷
- UE4 蓝图教程(一) 开始,一个转动的香蕉
- 解决JSP中文乱码问题
- SQLSERVER走起微信公众帐号已经开通搜狗微信搜索
- 爬取初试----猫眼电影,猫眼评分
- github网站扩展增强
热门文章
- HDU2159(完全背包)
- 魔术方法 类 序列化_Java序列化魔术方法及其示例使用
- 顽皮狗 多线程分享_谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!...
- apache.camel_Apache Camel 2.18发布–包含内容
- spring async_Spring Async和Java的8 CompletableFuture
- 绩效工作流_流绩效–您的想法
- javafx有布局管理器吗_JavaFX技巧17:带有AnchorPane的动画工作台布局
- jboss将war放在那?_将策略插入JBoss Apiman
- optaplanner_OptaPlanner –具有真实道路距离的车辆路线
- 您的JVM是否泄漏文件描述符-像我的一样?