一起学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框架一样, ...
随机推荐
- @PathVariable 处理参数为空的情况
@RequestMapping(value = "/get/{id}/{userId}", method = RequestMethod.GET) public Result ge ...
- 基于vue的cropper插件编写分享
目录 简介 实现功能 实现原理 github地址:https://github.com/yinzhida/vue-crop git clone: https://github.com/yinzhida ...
- 华为云ModelArts2.0来袭
[摘要] modelarts自发布以来,不断地更新增加新的功能来为AI工程师们带来新的服务,在这次的全联接大会上EI服务产品部总经理贾永利宣布--华为云AI重装升级,并重磅发布一站式AI开发管理平台M ...
- CSS 3D图片翻转 ——3D Flipping Effect
效果: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- vmware虚拟机扩大硬盘
记录一下对vmware虚拟机扩大硬盘的过程.操作有风险,重要数据请先进行备份. 1.首先在vcenter中将虚拟机下电,然后编辑虚拟机,将虚拟机硬盘扩大.具体操作见下图 2.打开虚拟机电源,利用fdi ...
- 用Java编程语言对一个无序整形数组进行排序(冒泡排序,选择排序,插入排序)
public static void main(String[] args) { /** * 冒泡排序 * 思路:每个轮次都让第一个数和其后所有的数进行轮比较,如果这轮的第一个数大则和其下一个数交换位 ...
- Yii2框架那些折磨人的坑
说点闲话 距离上次写博客,已经有一年了.在动手写之前,总是带着深深的罪恶感.被它折磨许久,终于,还是,动手了. 值得庆祝的一件事:最近开始健身了.每天动感单车45分钟,游泳45分钟,真的是(生)爽(不 ...
- 摄像头CMOS和CCD的比较
转载自网络,在此做一下总结,仅供参考: 1.CCD每曝光一次,在快门关闭后进行像素转移处理,将每一行中每一个像素(pixel)的电荷信号依序传入“缓冲器”中,由底端的线路引导输出至 CCD 旁的放大器 ...
- 聊聊技术选型 - Angular2 vs Vue2
作者介绍:李旸,美团点评前端工程师,3 年 Web 前端开发经验,现在是美团点评点餐团队的一员. "Come, and take choice of all my library, And ...
- PHP7 break和continue的区别
break:结束当前 for,foreach,while,do-while 或者 switch 结构的执行. continue:在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次 ...