在系统开发过程中,异常处理是不可避免,如果异常处理不好,会给用户造成很差的体验,本文主要讲解在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. 引用公共页面的js函数报错

    对于网站来说很多页面之间都有着大量的共享模块,如页头,页脚和用户栏等.很多时候为了方便.省事,我们在公共模块写函数,然后在别的页面里调用.但我们在引用公共的js函数时,有些可以引用,有些却报错:这是因 ...

  2. NAT的三种类型

    一.静态NAT 内部本地地址一对一转换成内部全局地址,相当内部本地的每一台PC都绑定了一个全局地址,即使这个地址没有被使用,其他的电脑也不能拿来转换使用,这样容易造成IP地址的资源浪费,一般是用于在内 ...

  3. Python之HTTP协议

    HTTP协议,又称超文本传输协议,主要用于浏览器与服务器之间的通信. HTTP 协议的制作者是蒂姆·伯纳斯-李,1991年设计出来的,HTTP 协议设计之前目的是传输网页数据的,现在允许传输任意类型的 ...

  4. 十一、springboot 配置log4j2以及打包成zip文件

    前言 其实我们前面已经配置了日志,但是最近总感觉日志日志格式看的不舒服,并且每次打包都是一个jar 文件,lib都包含在jar 中,每次做很小的修改都需要重新替换jar文件,jar文件会比较大,传输起 ...

  5. 数据库Oracle字符处理函数

    练习字符处理函数(数据库表都是从1开始),我们用到一张"伪表" dual: dual 表:dual 是一张只有一个字段,一行记录的表.dual 表也称之为'伪表',因为他不存储主题 ...

  6. 【解决】image ... could not be accessed on a registry to record its digest.

    [问题]image jmdiservice:1206 could not be accessed on a registry to record its digest. Each node will ...

  7. [Cake] 3. dotnet 本地工具 cake & dotnet format

    在上一篇[Cake] 2. dotnet 全局工具 cake中介绍了通过.Net Core 2.1 的全局工具dotnet tool命令来简化cake的安装和使用.因为是全局安装,则无法适应每个项目对 ...

  8. 201871010119-帖佼佼《面向对象程序设计(java)》第十二周学习总结

    博客正文开头格式: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nw ...

  9. servlet的三大作用域对象和jsp的九大内置对象及其四大作用域对象

    servlet的三大作用域对象: request(HttpServletRequest) session(HttpSession): application(ServletContext):tomca ...

  10. 区块链学习——HyperLedger-Fabric v1.0环境搭建详细教程

    相对与v0.6版本来说,1.0版本改变较大,此处不多说,只是将小白自己搭建1.0环境的过程分享给大家.希望对大家能有所帮助! 这一篇可能对前面的环境搭建会写的有些粗略,如有疑问,可阅读上一篇V0.6版 ...