SpringMVC学习篇(六)
创始人
2024-01-25 03:59:31
0

SpringMVC之全局异常的处理

1 注解方式

1.1 准备工作

1.1.1 导入springmvc依赖和lombok依赖

org.springframeworkspring-webmvc5.3.22org.projectlomboklombok1.18.24

1.1.2 创建一个自定义消息通知工具类

package com.util;
import lombok.Data;
//自定义响应类型
@Data
public class Results {/*状态码信息数据*/private int code;//状态码private String msg;//信息private Object data;//数据public Results(int code, String msg) {this.code = code;this.msg = msg;}public Results(int code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}public static Results ok(){return new Results(200, "success");}/*自定义消息*/public static Results ok(String msg){return new Results(200, msg);}public static Results ok(String msg,Object data){return new Results(200, msg,data);}/*自己命名的状态码*/public static Results err(String msg){return new Results(500,msg);}
}

1.2 空指针异常

1.2.1 示例代码

a 访问地址时的代码
 @RequestMapping("err1")public String a1(){String s=null;System.out.println("测试进入了没有???");System.out.println(s.indexOf("abc"));return "操作成功";}
b 异常处理时的代码
package com.controller;
import com.util.Results;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class MyExceptionHandler {@ExceptionHandler(NullPointerException.class)public Results ex1(NullPointerException ex){//只要出现空指针异常就进入这里ex.printStackTrace();//控制台打印异常 便于观察和调试return  Results.err("空指针异常");}
}

1.2.2 代码分析

因为配置SpringMVC的时候只扫描了controller包,因此这个异常处理类是需要放在Controller类这个里面的
通过@RestControllerAdvice和@ExceptionHandler给指定的异常配备了处理方法,那么只要在访问过程中出现了该异常,那么就会自动进入该方法

1.2.3 代码运行截图

a 前台运行截图

在这里插入图片描述

b 控制台运行截图

在这里插入图片描述

1.3 数组下标越界

1.3.1 示例代码

a 访问地址时的代码
@RequestMapping("err2")public String a2(){String[] arr={};System.out.println(arr[100]);return "操作成功";}
b 异常处理时的代码
package com.controller;
import com.util.Results;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class MyExceptionHandler {@ExceptionHandler(ArrayIndexOutOfBoundsException.class)public Results ex2(ArrayIndexOutOfBoundsException ex){//只要出现数组下标越界异常就进入这里ex.printStackTrace();//控制台打印异常 便于观察和调试return  Results.err("请求的下标越界 越界信息"+ex.getMessage());}
}

1.3.2 代码分析

a 需要对什么异常信息进行处理,就可以通过 @ExceptionHandler注解将对应异常类的.class作为参数传入进去
b 因为我们是要进行bug的修复,所以可以通过 ex.printStackTrace()的方式在控制台打印错误信息,方便我们进行后续的调试

1.3.3 代码运行截图

a 前台运行截图

在这里插入图片描述

b 控制台运行截图

在这里插入图片描述

1.4 其他异常

1.4.1 示例代码

a 访问地址时的代码
 @RequestMapping("err3")public String a3(){System.out.println(1/0);return "操作成功";}
b 异常处理时的代码
package com.controller;
import com.util.Results;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class MyExceptionHandler {@ExceptionHandler(Exception.class)public Results ex2(Exception ex){//只要出现任何异常就进入这里ex.printStackTrace();//控制台打印异常 便于观察和调试return  Results.err("服务器报错 信息"+ex.getMessage());}
}

1.4.2 代码分析

配置了Exception类,那么所有出现的异常都能进入该方法,保证呢对所有的错误进行精准的调试

1.4.3 代码运行截图

a 前台运行截图

在这里插入图片描述

b 控制台运行截图

在这里插入图片描述

2 xml方式

2.1 准备工作

2.1.1 WEB-INF文件夹下创建空指针处理页面

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>

Title

空指针异常

<%="错误信息:"+exception.getMessage()%>

2.1.2 WEB-INF文件夹下创建数组下标越界异常处理界面

<%@ page contentType="text/html;charset=UTF-8" language="java"  isErrorPage="true" %>

Title

数组下标越界异常

<%="错误信息:"+exception.getMessage()%>

2.1.3 WEB-INF文件夹下创建其他异常处理界面

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>

Title

服务器异常

<%="错误信息:"+exception.getMessage()%>

2.2 配置springMVC主配置文件


WEB-INF/kzzWEB-INF/szyj

2.3 空指针异常

2.3.1 示例代码

@RequestMapping("err1")
public String a1(){String s=null;System.out.println("测试进入了没有???");System.out.println(s.indexOf("abc"));return "操作成功";
}

2.3.2 代码运行截图

在这里插入图片描述

2.4 数组下标越界异常

2.4.1 示例代码

  @RequestMapping("err2")public String a2(){String[] arr={};System.out.println(arr[100]);return "操作成功";}

2.4.2 代码运行截图

在这里插入图片描述

2.5 除上述两种异常之外的异常

2.5.1 示例代码

 @RequestMapping("err3")public String a3(){System.out.println(1/0);return "操作成功";}

2.5.2 代码运行截图

在这里插入图片描述

3 总结

一般来说,配置全局异常处理的话,采用的是注解方式居多,因为它可以很灵活的去处理出现的异常

相关内容

热门资讯

人生的励志箴言 关于人生的励志箴言  1.朋友是雨中伞,遮风挡雨; 朋友是雪中炭,暖心驱寒;朋友是被中棉,温暖身心;...
不悔梦归处美文 不悔梦归处美文  今天去图书馆,一下午的时间看了点刘庸的《我不是教你祚》,晚上时也实在是无聊,又不想...
十部必看韩剧历史剧   大家看韩剧喜欢看韩国的历史剧吗?下文是励志网整理的十部必看韩剧历史剧,希望能帮助到你。  十部必...
青春奋斗带字励志图片   伟人之所以伟大,是因为他与别人共处逆境时,别人失去了信心,他却下决心实现自己的目标。下面是由yj...
古人关于描写云的励志诗句集锦 天空中又出现许多千变万化的云彩,时而像羽毛,轻轻地漂泊在空中;时而像羊群,缓缓地移动;时而像大海,翻...
校园励志电影 应届毕业生励志网分享15部校园励志电影:  1、律政俏佳人1、2(Legally Blonde)……...
生产管理励志口号 生产管理励志口号大全  1. 异常改善改善再改善,浪費减少减少再减少  2. 小问题,要重视,老毛病...
tvb励志电视剧2017   2017tvb新片巡礼剧有哪些?2017年tvb依然有好多好看的电视剧准备开播?下面我们一起来看...
励志江苏大龄考生陈洪涛 励志江苏大龄考生陈洪涛  参加16个专业自考  他还拥有多张资格证书  陈洪涛高中毕业后就去了扬州电...
青春励志女生合唱歌曲   导语:有哪些适合女孩子合唱的青春励志歌曲呢?以下是小编收集整理的青春励志女生合唱歌曲,希望大家喜...
青春励志人生小说   青春啊,难道你始终囚禁在狭小圈子里?你得撕破老年的蛊惑人心的网。今天励志网就为大家推荐一些青春励...
高考励志对联集锦   引导语:不知不觉,高考又要来到了,为了鼓励考生,下面unjs小编为大家带来关于高考励志的对联集锦...
四年级语文《徐悲鸿励志学画》... 四年级语文《徐悲鸿励志学画》教学反思  作为一名到岗不久的老师,我们的任务之一就是教学,对教学中的新...
励志歌曲集 励志歌曲之一腾格尔:大男人罗嘉良:创造晴天温兆伦:从未试过拥有Michael Learns To R...
初三班级励志誓词   导语:中考不相信“如果”,多一份勤奋,少一份后悔。在面对即将到来的高考,以下是小编整理的关于初三...
特深沉的人生感悟语句励志 特深沉的人生感悟语句【励志】  人生最重要的不是我们置身何处,而是我们将前往何处,特深沉的人生感悟语...
励志电影《土豪的情人节》推荐   土豪情人节又名土豪520。  《土豪520》是中国电影股份有限公司、江苏幸福蓝海院线有限公司、浙...
励志八字真言 励志八字真言  1、自加压力,敢于争先。  2、孜孜不倦,蒸蒸日上。  3、愚者千虑,必有一得。  ...
成功女人的励志故事 成功女人的励志故事  导语:谁说女子不如男?现在的女子可是个个都能够撑起半边天,事事靠自己。下面是小...
高三励志文章:高三,时间是赞... 高三励志文章:高三,时间是赞下来的    离2011年高考还剩下大约50天的时间了。    我们在复...