Spring MVC处理异常最基本的就是HandlerExceptionResolver这个接口,先看张图

分析上图可以轻松总结出,spring mvc里有三种异常处理方法:

1.使用官方提供的简单异常处理器SimpleMappingExceptionResolver

使用示例

springMVC-servlet.xml

  1. <beanclass="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  2. 定义默认的异常处理页面,当该异常类型的注册时使用
  3. <property name="defaultErrorView" value="error">
  4. </property>
  5. 定义异常处理页面用来获取异常信息的变量名,默认名为exception
  6. <propertyname="exceptionAttribute"value="ex"></property>
  7. 定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值
  8. <property name="exceptionMappings">
  9. <props>
  10. <propkey="etc.exception.MyException">error-my</prop>
  11. 这里还可以继续扩展对不同异常类型的处理
  12. </props>
  13. </property>
  14. </bean>

MyExceptionHandler.java

  1. public class MyExceptionHandler{
  2.  
  3. @ExceptionHandler
  4. public ModelAndView resolveException(HttpServletRequest request,
  5. HttpServletResponse response, Object handler, Exception ex) {
  6. Map<String, Exception> map = new HashMap<String, Exception>();
  7. map.put("ex",ex);
  8.  
  9. // 根据获取的Exception参数进行view跳转
  10. if (ex instanceof MyException) {
  11. return new ModelAndView("error-my",map);
  12. } else {
  13. return new ModelAndView("error",map);
  14. }
  15. }
  16. }

定义了这样一个异常处理器之后就要在springMVC-servlet.xml中定义这样一个bean对象,如

  1. <bean id="myExceptionHandler" class="com.tiantian.xxx.web.handler.myExceptionHandler"/>

2.使用@ResponseStatus注解

带有@ResponseStatus注解的异常类会被ResponseStatusExceptionResolver 解析。可以实现自定义的一些异常,同时在页面上进行显示。

使用示例

首先定义一个异常类:

  1. @ResponseStatus(value = HttpStatus.FORBIDDEN,reason = "用户名和密码不匹配!")
  2. public class UserNameNotMatchPasswordException extends RuntimeException{
  3.  
  4. }

抛出一个异常:

  1. @RequestMapping("/testResponseStatusExceptionResolver")
  2. public String testResponseStatusExceptionResolver(@RequestParam("i") int i){
  3. if (i==13){
  4. throw new UserNameNotMatchPasswordException();
  5. }
  6. System.out.println("testResponseStatusExceptionResolver....");
  7. return "success";
  8. }

输入如下额路径:

http://localhost:8090/testResponseStatusExceptionResolver?i=13

当然,也可以在方法上进行修饰:

  1. @ResponseStatus(reason = "测试",value = HttpStatus.NOT_FOUND)
  2. @RequestMapping("/testResponseStatusExceptionResolver")
  3. public String testResponseStatusExceptionResolver(@RequestParam("i") int i){
  4. if (i==13){
  5. throw new UserNameNotMatchPasswordException();
  6. }
  7. System.out.println("testResponseStatusExceptionResolver....");
  8. return "success";
  9. }

这时所有的请求都会报错。

3.使用全局异常处理

@ExceptionHandler异常统一处理

SpringMVC中异常处理详解的更多相关文章

  1. Spring Boot异常处理详解

    在Spring MVC异常处理详解中,介绍了Spring MVC的异常处理体系,本文将讲解在此基础上Spring Boot为我们做了哪些工作.下图列出了Spring Boot中跟MVC异常处理相关的类 ...

  2. SpringMVC 常用注解 详解

    SpringMVC 常用注解 详解 SpringMVC 常用注解 1.@RequestMapping                                      路径映射 2.@Requ ...

  3. PHP异常处理详解

      PHP异常处理详解 异常处理(又称为错误处理)功能提供了处理程序运行时出现的错误或异常情况的方法. 异常处理通常是防止未知错误产生所采取的处理措施.异常处理的好处是你不用再绞尽脑汁去考虑各种错误, ...

  4. Java程序在内存中运行详解

    目录 Java程序在内存中运行详解 一.JVM的内存分布 二.程序执行的过程 三.只有一个对象时的内存图 四.两个对象使用同一个方法的内存图 五.两个引用指向同一个对象的内存图 六.使用对象类型作为方 ...

  5. Web容器中DefaultServlet详解 JspServlet DefaultServlet

    Web容器中DefaultServlet详解 https://blog.csdn.net/qq_30920821/article/details/78328608 Web容器中DefaultServl ...

  6. Web容器中DefaultServlet详解

    万分感谢原文作者:_licho 原文链接:https://blog.csdn.net/qq_30920821/article/details/78328608 Web容器中DefaultServlet ...

  7. winxp计算机管理中服务详解

    winxp计算机管理中服务详解01 http://blog.sina.com.cn/s/blog_60f923b50100efy9.html http://blog.sina.com.cn/s/blo ...

  8. cocos2dx常见的46中+22中动作详解

    cocos2dx常见的46中+22中动作详解 分类: iOS2013-10-16 00:44 1429人阅读 评论(0) 收藏 举报 bool HelloWorld::init(){    ///// ...

  9. Android中Context详解 ---- 你所不知道的Context

    转自:http://blog.csdn.net/qinjuning/article/details/7310620Android中Context详解 ---- 你所不知道的Context 大家好,  ...

随机推荐

  1. POJ 1265:Area

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4725   Accepted: 2135 Description ...

  2. Web.config中加了system.diagnostics节点后就不能访问了

    Web.config中加了system.diagnostics节点后就不能访问了,怎么回事? [解决方法] 不要把system.diagnostics节点作为web.config的第一个节点.

  3. GeSHi Documentation

    GeSHi Documentation Version 1.0.8.11 Authors: © 2004 - 2007 Nigel McNie © 2007 - 2012 Benny Baumann ...

  4. 打通Fedora19的ssh服务

    Fedora19的SSH服务是默认关闭的,安装后我们需要打通它. 首先,编辑/etc/ssh/sshd_config,把下面黑体字部分打开注释,如下: #       $OpenBSD: sshd_c ...

  5. Java 程序内存分析

    转自:http://www.iteye.com/topic/528230 java程序内存主要分为了2个部分,包括stack segment(栈内存区).heap segment(堆内存区). 在分析 ...

  6. 通过WebRTC实现实时视频通信(二)

    通过WebRTC实现实时视频通信(一) 通过WebRTC实现实时视频通信(二) 通过WebRTC实现实时视频通信(三) 在上一篇文章中,我们讲解了WebRTC的概述.历史.安全性和开发者工具.接下来我 ...

  7. 使用AKKA做分布式爬虫的思路

    上周公司其它小组在讨论做分布式爬虫,我也思考了一下.提了一个方案,就是使用akka分布式rpc框架来做,自己写master和worker程序,client向master提交begin任务或者其它爬虫需 ...

  8. Opera Unit如何自定义My Opera的网页界面

    1 双击Opera Unite Home进入你的个人主页 2 点击你的头像进入你的个人信息设置页面,然后点击右上角的设置图标 3 在下拉菜单中选择"Customize design" ...

  9. windows7系统下升级到IE11时无法使用F12开发人员工具的解决办法

    windows7系统下升级到IE11时,发现F12开发人员工具无法使用,打开都是空白的 解决办法,就是下载IE11的补丁,下载地址为:https://www.microsoft.com/zh-CN/d ...

  10. 霍纳法则(Horner Rule)介绍及C语言实现

    参考自:http://flynoi.blog.hexun.com/31272178_d.html 霍纳法则简介 假设有n+2个实数a0,a1,-,an,和x的序列,要对多项式Pn(x)= anxn+a ...