一起学SpringMVC之异常处理

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

概述

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

  1. 通过@ExceptionHandler来进行异常的捕获接收并处理。
  2. 通过@ResponseStatus注解来进行返回状态码内容的自定义处理。

通过@ExceptionHandler操作步骤

1. 自定义一个异常类,继承自Exception类

如下所示:@ExceptionHandler标注在方法上,表示此方法可以用来处理异常,如果有多个异常需要捕获,则用逗号隔开。

如果需要捕获其他类的异常,则需要在类上增加@ControllerAdvice注解。

 1 package com.hex.third;
 2
 3 import org.springframework.web.bind.annotation.ControllerAdvice;
 4 import org.springframework.web.bind.annotation.ExceptionHandler;
 5 import org.springframework.web.servlet.ModelAndView;
 6
 7 /**
 8  * 自定义异常
 9  * @author Administrator
10  *
11  */
12
13 @ControllerAdvice
14 public class MyException extends Exception {
15
16     /**
17      * 该方法可以捕获本类中抛出的ArithmeticException异常,可以支持多个异常
18      * @param ex 要捕获的一样,此方法必须只有一个参数,如果有其他类型的参数,则会报错
19      * @return
20      */
21     @ExceptionHandler({ArithmeticException.class,ArrayIndexOutOfBoundsException.class,MyArrayOutofBoundsException.class})
22     public ModelAndView handlerException(Exception ex){
23         //将ex信息在后台输出
24         System.out.println(ex.getMessage());
25         //将错误信息显示在前台
26         ModelAndView mav=new ModelAndView();
27         mav.setViewName("error");
28         mav.addObject("exce", ex);
29         return mav;
30     }
31 }

2. 定一个方法,抛出一个数学异常,则可以进行捕获,并显示到错误页面

 1 package com.hex.third;
 2
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.ControllerAdvice;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.servlet.ModelAndView;
 7
 8 @Controller
 9 public class Exce2Controller {
10
11     /**
12      * 抛出一个异常
13      * @return
14      */
15     @RequestMapping("/helloexce2")
16     public ModelAndView HelloExce2(){
17         try{
18             int i=1/0 ;
19         }catch(ArithmeticException ex){
20             throw ex;
21         }
22         ModelAndView mav=new ModelAndView();
23         mav.addObject("helloexce","hello exception");
24         mav.setViewName("success");
25         return mav;
26     }
27 }

3. 运行测试

输出错误页面,如下所示:

通过@ResponseStatus,返回错误信息,操作步骤

1. 自定义一个异常类,并增加@ResponseStatus注解

如下所示:value表示状态码,是枚举类型,reason显示状态信息

 1 package com.hex.third;
 2
 3 import org.springframework.http.HttpStatus;
 4 import org.springframework.web.bind.annotation.ResponseStatus;
 5
 6 /**
 7  * 自定义异常类
 8  * @author Administrator
 9  * @ResponseStatus即可以表示在类前面,也可以表识在方法前面
10  *
11  */
12 @ResponseStatus(value=HttpStatus.FORBIDDEN,reason="页面禁止访问22222")
13 public class MyArrayOutofBoundsException extends Exception {
14
15 }

2. 定义一个方法抛出该异常

如下所示:

 1 /**
 2      * 测试第三个异常
 3      * @return
 4      * @throws MyArrayOutofBoundsException
 5      */
 6     @RequestMapping("/helloexce3")
 7     public ModelAndView HelloExce3() throws MyArrayOutofBoundsException{
 8         if(true){
 9         throw new MyArrayOutofBoundsException();
10         }
11         ModelAndView mav=new ModelAndView();
12         mav.addObject("helloexce","hello exception");
13         mav.setViewName("success");
14         return mav;
15     }

3. 运行测试

如下所示:Message即为自定义信息

4. 注意:@ExceptionHandler和@ResponseStatus这两种处理异常的方法,不可以同时存在。

关于异常解析的分类,如下所示:用到的时候,可以多研究一下。

备注

不论是狮子还是羚羊,都要奔跑;不论是贫穷还是富有,都要奋斗。

原文地址:https://www.cnblogs.com/hsiang/p/11605221.html

时间: 2024-07-31 11:32:11

一起学SpringMVC之异常处理的相关文章

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

跟我学SpringMVC目录汇总贴.PDF下载.源码下载 http://jinnianshilongnian.iteye.com/blog/1752171 跟开涛学SpringMVC 在线版目录 第一章 Web MVC简介 第二章 Spring MVC入门 第三章 DispatcherServlet详解 第四章 Controller接口控制器详解(1) 第四章 Controller接口控制器详解(2) 第四章 Controller接口控制器详解(3) 第四章 Controller接口控制器详解(

springMVC之异常处理

1. 自定义一个异常类: UserException.java public class UserException extends RuntimeException { private static final long serialVersionUID = 1L; public UserException() { super(); } public UserException(String message, Throwable cause) { super(message, cause);

spring--处理器拦截器详解——跟着开涛学SpringMVC

5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器) 类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.   5.1.1.常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 3.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时

springmvc的异常处理&对静态的资源的处理

1 springmvc的异常处理方式,暂时我知道的两种 2 1.在controller中捕获 3 /** 4 * 捕获到异常,用于局部处理 5 * @ExceptionHandler (value={要捕获的异常,可以有多个}) 6 * @param e 7 * @param req 8 * @return 9 */ 10 @ExceptionHandler(value={UserException.class}) 11 public String handlerException(UserEx

SpringMVC 全局异常处理

在 JavaEE 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大.SpringMvc 对于异常处理这块提供了支持,通过 SpringMvc 提供的全局异常处理机制,能够将所有类型的异常处从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护. 全局异常实现方式 Spring MVC

【Spring】SpringMVC之异常处理

java中的异常分为两类,一种是运行时异常,一种是非运行时异常.在JavaSE中,运行时异常都是通过try{}catch{}捕获的,这种只能捕获显示的异常,通常项目上抛出的异常都是不可预见.那么我们能够有什么方法能够解决这种问题吗?当然有,SpringMVC中的异常处理机制就很好的做到了这一点. SpringMVC中的异常处理一共有3种方式 (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver: (2)实现Spring的异常处理接口Han

SpringMvc的异常处理

首先在SpringMVC中加上<mvc:annotation-driven>标签: <mvc:annotation-driven></mvc:annotation-driven> 新建一个error.jsp页面 1.基于注解的异常处理 (1)@ExceptionHandler注解 在当前Handler中定义由@ExceptionHandler注解修饰的方法,用于处理当前Handler中的异常信息! 在Handler中定义如下方法: 1 @ExceptionHandler

SpringMVC对异常处理的支持

无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了.跟其他MVC框架一样,springMVC也有自己的异常处理机制. springMVC提供的异常处理主要有两种方式,一种是直接实现自己的HandlerExceptionResolver,当然这也包括使用Spring已经为我们提供好的SimpleMappingExceptionResolver和DefaultHandlerE

【Spring】18、springMVC对异常处理的支持

无论做什么项目,进行异常处理都是非常有必要的,而且你不能把一些只有程序员才能看懂的错误代码抛给用户去看,所以这时候进行统一的异常处理,展现一个比较友好的错误页面就显得很有必要了.跟其他MVC框架一样,springMVC也有自己的异常处理机制.springMVC提供的异常处理主要有两种方式,一种是直接实现自己的HandlerExceptionResolver,当然这也包括使用Spring已经为我们提供好的SimpleMappingExceptionResolver和DefaultHandlerEx