一起学SpringMVC之异常处理
在系统开发过程中,异常处理是不可避免,如果异常处理不好,会给用户造成很差的体验,本文主要讲解在SpringMVC开发过程中,异常处理的相关知识点,仅供学习分享使用,如有不足之处,还请指正。
概述
在SpringMvc中,处理异常有好几种方法,本文主要讲解两种方案:
- 通过@ExceptionHandler来进行异常的捕获接收并处理。
- 通过@ResponseStatus注解来进行返回状态码内容的自定义处理。
通过@ExceptionHandler操作步骤
1. 自定义一个异常类,继承自Exception类
如下所示:@ExceptionHandler标注在方法上,表示此方法可以用来处理异常,如果有多个异常需要捕获,则用逗号隔开。
如果需要捕获其他类的异常,则需要在类上增加@ControllerAdvice注解。
package com.hex.third; import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView; /**
* 自定义异常
* @author Administrator
*
*/ @ControllerAdvice
public class MyException extends Exception { /**
* 该方法可以捕获本类中抛出的ArithmeticException异常,可以支持多个异常
* @param ex 要捕获的一样,此方法必须只有一个参数,如果有其他类型的参数,则会报错
* @return
*/
@ExceptionHandler({ArithmeticException.class,ArrayIndexOutOfBoundsException.class,MyArrayOutofBoundsException.class})
public ModelAndView handlerException(Exception ex){
//将ex信息在后台输出
System.out.println(ex.getMessage());
//将错误信息显示在前台
ModelAndView mav=new ModelAndView();
mav.setViewName("error");
mav.addObject("exce", ex);
return mav;
}
}
2. 定一个方法,抛出一个数学异常,则可以进行捕获,并显示到错误页面
package com.hex.third; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; @Controller
public class Exce2Controller { /**
* 抛出一个异常
* @return
*/
@RequestMapping("/helloexce2")
public ModelAndView HelloExce2(){
try{
int i=1/0 ;
}catch(ArithmeticException ex){
throw ex;
}
ModelAndView mav=new ModelAndView();
mav.addObject("helloexce","hello exception");
mav.setViewName("success");
return mav;
}
}
3. 运行测试
输出错误页面,如下所示:

通过@ResponseStatus,返回错误信息,操作步骤
1. 自定义一个异常类,并增加@ResponseStatus注解
如下所示:value表示状态码,是枚举类型,reason显示状态信息
package com.hex.third; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus; /**
* 自定义异常类
* @author Administrator
* @ResponseStatus即可以表示在类前面,也可以表识在方法前面
*
*/
@ResponseStatus(value=HttpStatus.FORBIDDEN,reason="页面禁止访问22222")
public class MyArrayOutofBoundsException extends Exception { }
2. 定义一个方法抛出该异常
如下所示:
/**
* 测试第三个异常
* @return
* @throws MyArrayOutofBoundsException
*/
@RequestMapping("/helloexce3")
public ModelAndView HelloExce3() throws MyArrayOutofBoundsException{
if(true){
throw new MyArrayOutofBoundsException();
}
ModelAndView mav=new ModelAndView();
mav.addObject("helloexce","hello exception");
mav.setViewName("success");
return mav;
}
3. 运行测试
如下所示:Message即为自定义信息

4. 注意:@ExceptionHandler和@ResponseStatus这两种处理异常的方法,不可以同时存在。
关于异常解析的分类,如下所示:用到的时候,可以多研究一下。

备注
不论是狮子还是羚羊,都要奔跑;不论是贫穷还是富有,都要奋斗。
一起学SpringMVC之异常处理的更多相关文章
- 【转】跟着开涛学SpringMVC
跟着开涛学SpringMVC 第一章源代码下载 博客分类: 跟开涛学SpringMVC 跟开涛学SpringMVC 源代码请到附件中下载. 其他下载: 跟着开涛学SpringMVC 第一章源代码下载 ...
- 跟我学SpringMVC目录汇总贴、PDF下载、源码下载
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列
Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列
- 学SpringMVC收藏
一个较完整的SpringMVC工程的配置 2014-01-22 17:17:25 标签:java spring springMVC 配置 springSecurity web.xml 原创作品,允许 ...
- SpringMVC 全局异常处理
在 JavaEE 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度 ...
- springmvc 中异常处理
springmvc 中异常处理常见三种处理方式: 1:SimpleMappingExceptionResolver处理的是处理器方法里面出现的异常 2 3.自定义异常处理器:处理的是处理器方法里面出现 ...
- springMvc全局异常处理
本文中只测试了:实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器 对已有代码没有入侵性等优点,同时,在异常处理时能获取导致出现异常的对象,有利于提 ...
- 012医疗项目-模块一:统一异常处理器的设计思路及其实现(涉及到了Springmvc的异常处理流程)
我们上一篇文章是建立了一个自定义的异常类,来代替了原始的Exception类.在Serice层抛出异常,然后要在Action层捕获这个异常,这样的话在每个Action中都要有try{}catch{}代 ...
- springMVC对异常处理的支持
无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了.跟其他MVC框架一样, ...
随机推荐
- Mac系统安装文件提示文件已损坏,打不开解决办法
Mac系统安装文件提示文件已损坏,打不开解决办法: 修改系统配置:系统偏好设置 - 安全性与隐私 - 任何来源”.如果没有“任何来源”这个选项,是因为你的系统是macOS Sierra 10.12,苹 ...
- centOS7 可以ping通主机不能访问外网
前言: 突然打开自己前不久在虚拟机安装的centOS7系统,发现以前可以来联网突然不能访问外网,在网上看了很多方法,终于解决 问题描述: 连上网,但是ping 不同外网,如ping www.baodu ...
- 怎么解决js中如滑动到最底端一次操作触发多次
定义一个布尔类型到标志,处理中将起设置为true ,处理完改完false,逻辑: data{ isInProcessing:false } //逻辑函数过程中: if(isInProcessing){ ...
- 转载:不是书评 :《我是一只IT小小鸟》
本文转载自刘未鹏博客:http://www.mindhacks.cn. 原文地址如下:http://mindhacks.cn/2009/10/05/im-a-tiny-bird-book-review ...
- Too many open files的四种解决办法【华为云技术分享】
[摘要] Too many open files有四种可能:一 单个进程打开文件句柄数过多,二 操作系统打开的文件句柄数过多,三 systemd对该进程进行了限制,四 inotify达到上限. 领导见 ...
- 188W+程序员关注过的问题:Java到底是值传递还是引用传递?
在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很多的程序员被这个 ...
- 时至今日,我们应该承认.Net目前的状况实在堪忧
一: .Net之前 .Net 经历了多年的锤炼,语言特性本身非常优雅和完善,也是非常甜品的一种语言 二: .Net现状 但是与此同时,.Net的生态日益糟糕,困扰着广大.Neter 三: .N ...
- 学好linux必须精通用户管理的章节知识
第12章 Linux中用户知识管理 12.1 系统开机启动流程 12.1.1 centos6系统开机启动流程 12.1.1.1 开机系统流程语言描述 服务器电源开关打开 bios自检 目的:检查硬件是 ...
- 《手把手教你》系列进阶篇之4-python+ selenium自动化测试 - python几种超神操作你都知道吗?(详细教程)
1. 简介 今天分享和讲解的超神操作,对于菜鸟来说是超神的操作,对于大佬来说也就是几个简单方法的封装和调用.这里讲解和分享这部分主要是为了培养小伙伴们和童鞋们的面向对象的开发思维,对比这样做的好处让你 ...
- WebSocket重连实现
方式一.使用第三方库实现 比如:reconnecting-websocket.jsReconnectingWebSocket,代码:https://github.com/joewalnes/recon ...