Spring MVC项目中的异常处理详解
作者:郭尕 发布时间:2021-12-22 09:19:20
前言
我们在项目的开发中,难免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。
那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的 功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的。下面将介绍Spring MVC是如何处理异常的。
1. 基于配置的简单异常处理
在SpringMVC中拥有一套非常强大的异常处理机制,SpringMVC通过 HandlerExceptionResolver处理程序的异常,包括请求映射,数据绑定以及目标方法的执行时发生的异常。
SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:
HandlerExceptionResolver,该接口的实现类有:DefaultHandlerExceptionResolver和
SimpleMappingExceptionResolver,下面就来看看如何使用简单异常处理器来处理异常。
使用 Spring MVC 提供的简单异常处理器 SimpleMappingExceptionResolver
Spring MVC配置文件
<!--配置异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!--ArithmeticException算术运算异常:是出现异常的运算条件时,抛出此异常-->
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
<property name="exceptionAttribute" value="e"/>
</bean>
注意:
properties的键表示处理器方法执行过程中出现的异常
properties的值表示若出现指定异常时,设置一个新的视图名称,跳转到指定页面
exceptionAttribute属性设置一个属性名,将出现的异常信息在请求域中进行共享
控制器方法
@RequestMapping("/testException")
public String testException(){
System.out.println(1/0);
return "success";
}
在该控制器方法中抛出一个算术运算异常,运行
2. 基于注解的全局异常处理
@ControllerAdvice:将当前类标识为异常处理的组件,是Spring提供的新注解,它是对Controller的增强,可对 controller中被 @RequestMapping注解的方法加一些逻辑处理;
@ExceptionHandler:用于设置所标识的方法处理的异常,@ExceptionHandler加在ControllerAdvice中,处理全局异常
ExceptionController
@ControllerAdvice
public class ExceptionController {
@ExceptionHandler(value = {ArithmeticException.class,NullPointerException.class})
public String exception(Exception e, Model model){
model.addAttribute("e",e);
return "error";
}
}
@ExceptionHandler的value值可以是数组,所以可以添加许多可能出现的异常;在该方法中
当出现算数运算异常或空指针异常就会跳转到我们自己设置的异常页面,并且展示异常信息。
error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>错误页面</title>
</head>
<body>
<h1>error</h1>
${e}
</body>
</html>
异常页面
总结
来源:https://blog.csdn.net/weixin_52986315/article/details/124909119
猜你喜欢
- 上一篇文章: # Android 10 启动分析之Zygote篇 (三)紧接着上一篇文章的内容,我们从这篇文章开始来分析一下 SystemS
- 主要原理:是在主界面有两个空间,一个是EditText,一个是ListView,ListView是放在EditText下面的,然后自定义建立
- <script>//验证身份证号方法var test=function(idcard){var Errors=new Array
- 协程源码的结构在研究Kotlin源码之前,得先搞懂Kotlin源码结构分布。不然找不到该看哪里的代码。看源码之前当然先得有一个目标,最好是带
- 大多数浏览器会对同一域名的请求限制请求数量,一般是在8个以内。每次最多可以同时请求8个,要是资源多于8个,那么剩下的就要排队等待请求了。所以
- 介绍无论是在WPF中还是WinForm中,都有用户控件(UserControl)和自定义控件(CustomControl),这两种控件都是对
- 前言:图片选择器基本上是每个App必备的东西,用公认好的第三方也可以,但是自己写的改起来方便,用起来顺手,而且这东西想想可能没动手之前想想比
- 对象创建的几种方法:使用new关键字使用clone方法反射机制反序列化以上四种都可以产生java对象1,3都会明确的显式的调用构造函数2是在
- 本文实例为大家分享了Android Camera实现可复用相机组件的具体代码,供大家参考,具体内容如下若自己的应用需要使用camera,有两
- 前言在C/S这种模式中,自动更新程序就显得尤为重要,它不像B/S模式,直接发布到服务器上,浏览器点个刷新就可以了。由于涉及到客户端文件,所以
- java eclipse经常会用到整个类进行查找,ctrl+f,然后replaceall(XX,toXX)。但是最近要对webservice
- package com;import java.util.Arrays; public class sjf { &nbs
- 大家好,我是狸小华,萌汉子一枚。今天给大家带来的是仿微信/支付宝的密码输入框。这个效果也出来有一段时间了,所以搜索一下还是有不少的网友实现,
- 本文实例讲述了Java数组队列概念与用法。分享给大家供大家参考,具体如下:一.队列的概念 (1)队列也是一种线性结构(2)相比数组
- 一、APP通过View修改鼠标样式app view上修改鼠标样式比较简单,通过 hover event 获取鼠标坐标并使用如下方法
- 多段颜色的进度条实现思路,供大家参考,具体内容如下这个进度条其实相对简单. 这里可以把需要绘制的简单分为两个部分1.灰色背景部分 2.多段颜
- 报错翻译: compileSdkVersion android-24”需要JDK 1.8或更高版本编译。报错现象如下图:原因:st
- C#中Invoke的用法()invoke和begininvoke 区别一直对invoke和begininvoke的使用和概念比较混乱,这两天
- 1、前言  原先的页面访问地址为:http://127.0.0.1:8888/office/schdul
- 引言应用 Java 的开源库,编写一个搜索引擎,这个引擎能爬取一个网站的内容。并根据网页内容进行深度爬取,获取所有相关的网页地址和内容,用户