在系统开发过程中,异常处理是不可避免,如果异常处理不好,会给用户造成很差的体验,本文主要讲解在SpringMVC开发过程中,异常处理的相关知识点,仅供学习分享使用,如有不足之处,还请指正。

概述

在SpringMvc中,处理异常有好几种方法,本文主要讲解两种方案:

  1. 通过@ExceptionHandler来进行异常的捕获接收并处理。
  2. 通过@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之异常处理的更多相关文章

  1. 【转】跟着开涛学SpringMVC

    跟着开涛学SpringMVC 第一章源代码下载 博客分类: 跟开涛学SpringMVC 跟开涛学SpringMVC  源代码请到附件中下载. 其他下载: 跟着开涛学SpringMVC 第一章源代码下载 ...

  2. 跟我学SpringMVC目录汇总贴、PDF下载、源码下载

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  3. Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列

    Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列

  4. 学SpringMVC收藏

     一个较完整的SpringMVC工程的配置 2014-01-22 17:17:25 标签:java spring springMVC 配置 springSecurity web.xml 原创作品,允许 ...

  5. SpringMVC 全局异常处理

    在 JavaEE 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度 ...

  6. springmvc 中异常处理

    springmvc 中异常处理常见三种处理方式: 1:SimpleMappingExceptionResolver处理的是处理器方法里面出现的异常 2 3.自定义异常处理器:处理的是处理器方法里面出现 ...

  7. springMvc全局异常处理

    本文中只测试了:实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器 对已有代码没有入侵性等优点,同时,在异常处理时能获取导致出现异常的对象,有利于提 ...

  8. 012医疗项目-模块一:统一异常处理器的设计思路及其实现(涉及到了Springmvc的异常处理流程)

    我们上一篇文章是建立了一个自定义的异常类,来代替了原始的Exception类.在Serice层抛出异常,然后要在Action层捕获这个异常,这样的话在每个Action中都要有try{}catch{}代 ...

  9. springMVC对异常处理的支持

    无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了.跟其他MVC框架一样, ...

随机推荐

  1. 基于ASP.NET Core 3.0快速搭建Razor Pages Web应用

    前言 虽然说学习新的开发框架是一项巨大的投资,但是作为一个开发人员,不断学习新的技术并快速上手是我们应该掌握的技能,甚至是一个.NET Framework开发人员,学习.NET Core 新框架可以更 ...

  2. react-starter-projects

    react-starter-projects These are repositories that you copy and modify to create your own React app. ...

  3. 面试一个小公司,TPM相关概念

    准备面试一个小公司,在面试邀请邮件中提出了这样一个要求(not required): ".. one item we will likely discuss with you is soft ...

  4. pycharm中启动Django方法

    1.找到Edit Configurations 2.Parameters处添加  runserver 0.0.0.0:8080 3.运行成功

  5. 最强Java并发编程详解:知识点梳理,BAT面试题等

    本文原创更多内容可以参考: Java 全栈知识体系.如需转载请说明原处. 知识体系系统性梳理 Java 并发之基础 A. Java进阶 - Java 并发之基础:首先全局的了解并发的知识体系,同时了解 ...

  6. [译]C#8.0中一个使接口更加灵活的新特性-默认接口实现

    9月份的时候,微软宣布正式发布C#8.0,作为.NET Core 3.0发行版的一部分.C#8.0的新特性之一就是默认接口实现.在本文中,我们将一起来聊聊默认接口实现. 众所周知,对现有应用程序的接口 ...

  7. [TimLinux] JavaScript input框的onfocus/onblur/oninput/onchange事件介绍

    1. onfocus事件 input框获取到焦点时,触发了该事件,比如获取到焦点时,修改input框的背景色.这个功能其实可以使用css的伪类:focus来定义. 2. onblur事件 这个与onf ...

  8. [TimLinux] MySQL InnoDB的外键约束不支持set default引用选项

    1. 外键 MySQL的MyISAM是不支持外键的,InnoDB支持外键,外键是MySQL中的三大约束中的一类:主键约束(PRIMARY KEY),唯一性约束(UNIQUE),外键约束(FOREIGN ...

  9. CSU OJ 2148 梦皮神

    Description Wells最近经常做一些有皮神出现的梦. 在这一次梦中Wells把皮神(Pikachu)弄丢了,Wells在一个正 N 边形区域的中心开始自闭,Wells想找回皮神,同时皮神也 ...

  10. Python3 函数进阶1

    目录 闭包函数 什么是闭包函数 闭包函数的作用 装饰器 什么是装饰器 无参装饰器 有参装饰器 闭包函数 什么是闭包函数 闭包函数本质上就是函数嵌套和高阶函数 闭包函数的满足条件: 必须嵌套函数 内嵌函 ...