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

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

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

使用示例

springMVC-servlet.xml

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

MyExceptionHandler.java

public class MyExceptionHandler{

    @ExceptionHandler
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
Map<String, Exception> map = new HashMap<String, Exception>();
map.put("ex",ex); // 根据获取的Exception参数进行view跳转
if (ex instanceof MyException) {
return new ModelAndView("error-my",map);
} else {
return new ModelAndView("error",map);
}
}
}

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

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

2.使用@ResponseStatus注解

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

使用示例

首先定义一个异常类:

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

抛出一个异常:

  @RequestMapping("/testResponseStatusExceptionResolver")
public String testResponseStatusExceptionResolver(@RequestParam("i") int i){
if (i==13){
throw new UserNameNotMatchPasswordException();
}
System.out.println("testResponseStatusExceptionResolver....");
return "success";
}

输入如下额路径:

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

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

@ResponseStatus(reason = "测试",value = HttpStatus.NOT_FOUND)
@RequestMapping("/testResponseStatusExceptionResolver")
public String testResponseStatusExceptionResolver(@RequestParam("i") int i){
if (i==13){
throw new UserNameNotMatchPasswordException();
}
System.out.println("testResponseStatusExceptionResolver....");
return "success";
}

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

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. Java之对象构造过程

    先来运行一段代码 class A { public A() { init(); } public void init() { } public static void main(String[] ar ...

  2. Linux:su和su-的区别

    大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户.Linux中切换用户的命令是su或su -. 如上图所示,一 ...

  3. shell 编程笔记

    #! /bin/sh 寻找shell解释器 /bin/sh  是一个路径 #! /usr/bin/python 仅仅是寻找一个python的解释器 执行linux程序的方法: 使得文件具有可执行的权限 ...

  4. ASP.NET之旅--深入浅出解读IIS架构

    在学习Asp.net时,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net. 他们耐心. 细致地告诉你如何一步步拖放控件. 设置控件属性.编写 CodeBehind代码,以实现某个特定的功能. ...

  5. storm0.9.0.1升级安装

    来自:http://blog.csdn.net/liuzhoulong/article/details/21112101 1,下载0.9.0.1 http://storm.incubator.apac ...

  6. Openerp对日期时间的操作

    日期格式化字符串:DATE_FORMAT = "%Y-%m-%d" 日期时间格式字符串:DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" ...

  7. java、c/c++ 、python 等性能比较 杂谈(整理)

    链接:https://www.zhihu.com/question/40393531/answer/133242263著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 有人用pyt ...

  8. DevExpress GridControl 动态创建字段及主细关系表过程

    原文地址:http://hi.baidu.com/qdseashore/item/38f1153e9d0143637d034b7a 在做项目中,往往需要在查询基类模板窗口内做主细关系Grid,引用一下 ...

  9. hdu1690Bus System--解题报告

    题意:有一个公交系统的收费标准例如以下表: 然后问:给出 这些L1~4 & C1~4的值,然后 N个站.列出每一个站的X坐标.然后询问M次,问两个站台的最小花费 题解:那么这里非常明显是最短路 ...

  10. macOS Sierra Git Gui Crash 解决方法

    本篇文章由:http://xinpure.com/macos-sierra-git-gui-crash-solution/ 问题描述 自从升级到 macOS Sierra 10.12 之后,git g ...