SpringMVC统一的异常处理

19、硬件工程师笔试面试——无线通讯模块(2025版本) 例如,如果你的项目需要传输大量数据,如视频流或大数据文件,那么你可能需要一个高速率的模块,如支持802.11ac或802.11ax(WiFi 6)的模块。如果你的数据传输需求较小,如传感器数据,那么一个较低速率的模块,如蓝牙或Zigbee,可能就足够了。较高的频率(如5GHz)提供更大的带宽,支持更高的数据传输速率,但信号覆盖范围较小,穿透能力较弱。例如,在蓝牙通信中,一台设备作为主机,另一台设备作为从机,它们通过频率跳频的方式确定连接,并在连接建立后通过特定的协议进行数据交换。 阅读详情

统一的异常处理

在springmvc的开发中,肯定会遇到各种各样的异常需要处理,如果每个异常都单独处理,系统的代码耦合性高,工作量大,维护困难。
Luckly,SpringMVC能将所有类型的异常从各层提取出来保障了相关处理过程的功能单一。

对于实现这种功能,SpringMVC有三种方法:

简单异常处理器SimpleMappingExceptionResolver:

1.首先在exception包中创建自定义异常类MyException为后面抛出自定义异常作准备:

@Repository("testExceptionDao")
public class TestExceptionDao {
  public void daodb() throws Exception {
   throw new SQLException("Dao中数据异常");
  }
  public void daomy() throws Exception {
   throw new MyException("Dao中自定义异常");
  }
  public void daono() throws Exception {
   throw new Exception("Dao中未知异常");
  }
}

2.在service包中创建service的三种类型的异常,还有dao层的三种异常:

@Autowired
 private TestExceptionDao testExceptionDao;
 @Override
 public void servicemy() throws Exception {
  throw new MyException("Service中自定义异常");
 }
 @Override
 public void servicedb() throws Exception {
  throw new SQLException("Service中数据库异常");
 }
 @Override
 public void daomy() throws Exception {
  testExceptionDao.daomy();
 }
 @Override
 public void daodb() throws Exception {
  testExceptionDao.daodb();
 }
 @Override
 public void serviceno() throws Exception {
  throw new MyException("Service中未知异常");
 }
 @Override
 public void daono() throws Exception {
  testExceptionDao.daono();
 }

3.在控制器中映射各种dao层、service层、controller层的异常
在这里插入图片描述
4.创建各种jsp,对应各种异常:
主页index.jsp:

<body>
  <h1>所有的演示例子</h1>
  <h3><a href = "${pageContext.request.contextPath }/daodb">处理dao中的数据库异常</a></h3>
  <h3><a href = "${pageContext.request.contextPath }/daomy">处理dao中的自定义异常</a></h3>
  <h3><a href = "${pageContext.request.contextPath }/daono">处理dao中的未知异常</a></h3>
  
  <h3><a href = "${pageContext.request.contextPath }/servicedb">处理service中的数据库异常</a></h3>
  <h3><a href = "${pageContext.request.contextPath }/servicemy">处理service中的自定义异常</a></h3>
  <h3><a href = "${pageContext.request.contextPath }/serviceno">处理service中的未知异常</a></h3>
  
  
  <h3><a href = "${pageContext.request.contextPath }/db">处理controller中的数据库异常</a></h3>
  <h3><a href = "${pageContext.request.contextPath }/my">处理controller中的自定义异常</a></h3>
  <h3><a href = "${pageContext.request.contextPath }/no">处理controller中的未知异常</a></h3>
  
  <!-- 在web.xml中配置 -->
  <h3><a href = "${pageContext.request.contextPath }/404">404错误</a></h3>
</body>

某种异常界面:

<body>
 <H1>数据库异常错误:</H1><%=exception %>
 <H2>错误内容:</H2>
 <%
  exception.printStackTrace(response.getWriter());
 %>
</body>

接下来就是最关键的Springmvc-servlet.xml的配置和web.xml的配置:

 <!-- 配置异常类与View的对应关系 -->
   <bean class = "org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
     <!-- 定义默认的异常页面,当该异常类型注册时使用 -->                
  	<property name="defaultErrorView" value = "error"></property>            
   <!-- 定义一场处理页名用来获取异常信息的变量名,默认为Exception -->
 	 <property name="exceptionAttribute" value = "ex"></property>             
   <!-- 定义需要特殊处理的异常,用类名或完全路径作为key,异常页名作为值 -->
 	 <property name="exceptionMappings" >                      
 	 <props>                                  
  	 	<prop key="exception.MyException">my-error</prop>               
  	 	<prop key="java.sql.SQLException">sql-error</prop>               
   <!-- 在这里还可以扩展对不同异常类型的处理 -->                    
	  </props>                                   
  </property>                                
 </bean>                                   

当然,还有一种就是很重要的404异常,就是找不到文件等问题,很烦。所以可以在创建相应的404.jsp以后在web.xml配置,如下:

 <error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/jsp/404.jsp</location> 
  </error-page>

还有,要在浏览器上打开,eclipes打不开404界面(我也不懂为啥。)!

第二种更简单:HandlerExerptionResolver接口:

1.首先在原来的基础上,在exception包中创建这个接口的实现类MyExceptionHandler:

public class MyExceptionHandler implements HandlerExceptionResolver{
 @Override
 public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,
   Exception arg3) {
  Map<String,Object> model  = new HashMap<>();
  model.put("ex", arg3);
  //根据不同错误转向不同页面,(统一处理)即异常与View对应
  if(arg3 instanceof MyException) {    //如果错误类型是MyException
    return new ModelAndView("my-error",model);
  }
  else if(arg3 instanceof SQLException) {//如果错误类型是SQLException
   return new ModelAndView("sql-error",model);
  }
  else {               //如果错误类型是Exception
   return new ModelAndView("error",model);
   
  }
 }
}

最后一步就只用把刚才上面springmvc-servlet中的对应关系删掉,换成下面的代码:

   <!-- 托管MyExceptionHandler -->
   <bean class= "exception.MyExceptionHandler"/>                 

然后就大功告成!非常简单。

第三种@ExceptionHandler注解:

1.也在原来开的基础上修改:
在controller包中添加BaseController类,用注解声明:

public abstract class BaseController {
  //基于ExceptionHandler异常处理
  @ExceptionHandler
  public String exception(HttpServletRequest request, Exception ex) {
   request.setAttribute("ex", ex);
   //根据不同错误转向不同页面,(统一处理)即异常与View对应
   if(ex instanceof SQLException) {
    return "sql-error";
   }
   else if(ex instanceof MyException) {
    return "my-error";
   }
   else
    return "error";
  }
}

看起来跟上一种方法很相似。
2. 接下来就是将已经创建好的TestExceptionController继承这个抽象类,在后面加上extends BaseController就可以。
3. 最后一步 :因为@ExceptionHandler注解声明统一处理异常时,不需要配置任何信息,所以Springmvc-servlet.xml中保留视图解析器就行,其他删掉。
4. 这种方法具有集成简单、可扩展性好、不需要附加Spring配置等优点。
5. 但这个方法对已有的代码存在入侵性,使相关类继承BaseController。

最后做一个笔记,修改代码以后最好重新启动服务器,不然有时候没有修改成功。

企业级AI平台架构设计:AI应用架构师的未来趋势 企业级AI平台是AI从“实验室”走向“生产线”的关键,而AI应用架构师就是这条“生产线”的总设计师。未来,随着生成式AI、边缘计算、自治式AI的发展,架构师的角色将越来越重要——他们不仅要构建技术平台,还要连接技术与业务,让AI真正创造价值。“不要做‘只会调模型的工程师’,要做‘能解决业务问题的架构师’。因为,真正有价值的AI,从来不是“最先进的模型”,而是“能落地、能复用、能创造业务价值的平台”。愿你在企业AI转型的浪潮中,成为那个“搭建桥梁的人”——连接技术与业务,连接现在与未来。 阅读详情

相关推荐

欧姆龙PMAC CK3M控制器新手避坑指南:从开箱到EtherCAT总线配置的完整流程

本文详细介绍了欧姆龙PMAC CK3M控制器的完整配置流程,从开箱检查到EtherCAT总线配置,特别针对新手常见问题提供避坑指南。内容包括硬件连接、软件安装、EtherCAT主站初始化、从站配置、电机参数设置等关键步骤,帮助工程师快速掌握PMAC控制器的使用技巧。

weixin_42532938的博客 390

12.Spring MVC统一异常处理

SystemError("999","系统异常,请联系管理员"),MyError1("001","自定义异常1"),MyError2("002","自定义异常2"),MyError3("003","自定义异常3");// 省略getter/settter方法private final String SUCCESSMSG = "请求成功";/***999 : 请求失败 (系统异常:这时候具体问题原因要去看日志)*000 : 请求成功。

相互学习 共同进步 373

CH569 USBSS库函数分析

CH569 USB3.0 解析

havc_W的博客 7685

Spring MVC 异常处理

Spring MVC 异常处理 使用 @ ExceptionHandler 注解 实现 HandlerExceptionResolver 接口 使用 @ControllerAdvice+ @ ExceptionHandler 注解 (重点) 针对RestController 统一处理 扩展 统一返回值

qq_52963857的博客 1824

利用正射影像对斜射图像进行反向投影

因此,RANSAC算法可以通过计算inliners和outliers的数量来评估估计关键点的质量,确保与其他点不一致的点不会在Homography矩阵中被估计。然后,它通过考虑关键点周围区域中图像的梯度大小和方向来计算每个提取的关键点的方向。由于单应性矩阵的计算可能会受到两个图像中异常值的存在的影响,这将导致矩阵的不正确估计并导致沿图像的对准和映射不良。FLANN匹配器的方法基于K近邻搜索的概念,即从图像中找到k个近邻。找到相机在正射影像坐标系中的位置并在正射影像上绘制重叠区域的边界框。

gis收藏家的博客 1512

2024最新版Anaconda Navigator安装使用指南

本文简要介绍如何下载安装Anaconda Navigator最新版,以及如何使用Python内核搭载来完成应用程序开发。

jackson_lingua的博客 1万+

Spring Boot 自定义异常内容

Spring Boot学习笔记(二十一):在上篇文章:Spring Boot 错误处理机制源码分析,我们已经对 Spring Boot 错误处理机制的源码部分内容进行了详细的讲解,接下来我们来介绍如何自定义我们自己的异常内容提示。 自定义异常,分两种情况来介绍: 1.使用模板引擎:       &...

扛麻袋的少年的博客 5395

用Charles抓包调试iOS应用?这份保姆级配置指南帮你绕过所有坑

本文提供了一份在Mac上使用Charles抓包调试iOS应用的保姆级配置指南。详细讲解了从Charles安装、Mac端代理设置、根证书安装,到iOS设备连接同一WiFi、配置代理以及最关键的系统证书信任等全流程步骤,并分享了SSL代理规则、断点调试等进阶技巧,帮助开发者高效定位和解决网络请求问题。

rice5的博客 640

使用Spring MVC统一异常处理实战

使用Spring MVC统一异常处理实战 博客分类: J2EESpringSpring MVC案例文档 SpringMVC异常处理  1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不

yundashi168.com 1638

实现单芯片2400bps 音频编解码方案

终于按照朋友的需求,帮他开发了一款单芯片集音频采集编码传送并接收解码播放功能的方案,交给快递公司邮寄给远在郑州的他.整个项目从开始定型到现在一个样机送出,整整花了1个月时间,感觉挺有成就感,挺有意思,工作是辛苦的,结果却是快乐的.现在将这中快乐的的心情与大家分享一下.    真个项目用一颗主控搞定,ARM9的,200KBytes 片内RAM,主频可以跑到300MHz,64pin LQFP封装

nyxsec的专栏 3684

华南理工大学-大学物理实验-绪论作业

3.用公式测量某圆柱体铝的密度,测得直径=2.0420.003(cm),高=4.1260.004(cm),质量=36.4880.006(g)。计算铝的密度和测量的标准差,并以测量结果表达式表示之。(要求判别和剔除异常数据)(30分)(了解图解法的注意事项,大学物理实验众多实验数据处理采用这种方法,如PN结温度特性研究,光电效应与普朗克常数的测定,霍尔效应测磁场等等,注意规范作图)实验测得温度与对应的金属丝的长度的数据如下表所示。(了解异常数据的判断方法及具体判断过程,30分的题目n(*≧▽≦*)n)

mohen_777的博客 581

Spring MVC统一异常处理的3种方式(附带实例)

在 Spring MVC 应用的开发中,不管是对底层数据库操作,还是业务层或控制层操作,都会不可避免地遇到各种可预知的、不可预知的异常需要处理。

unber的博客 1588

硬件学习手册【总目录】

欢迎大家来到《硬件学习手册》,专栏主要包括 《硬件经验手册》《电子元器件器件手册》《PCB手册》《CPU手册》《元器件选型手册》五个分册。在开始专栏的更新前,博主先列出专栏的大纲,以供大家参考。大家直接点击大纲中的蓝色标题即可轻松传送。

fydar的博客 5854

SpringMVC_day03 - 统一异常处理

/自定义异常处理器,用于封装异常信息,对异常进行分类​​​​​​//自定义异常处理器,用于封装异常信息,对异常进行分类​​​​​​​让自定义异常类继承的好处是,后期在抛出这两个异常的时候,就不用在try...catch...或throws了自定义异常类中添加code属性的原因是为了更好的区分异常是来自哪个业务的假如在BookServiceImpl的getById方法抛异常了,该如何来包装呢?//模拟业务异常,包装成自定义异常。

tang7mj的博客 916

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SpringMVC统一异常处理

在Spring MVC应用的开发中,不管是对底层数据库操作,还是业务层或控制层操作,都会不可避免地遇到各种可预知的,不可预知的异常需要处理。如果每个过程都单独处理异常,那么系统的代码耦合度高,工作量大且不好统一,以后维护的工作量也很大。 技术问题:将所有类型的异常处理从各层中解耦出来,这样既保证了相关处理过程的功能单一,又实现了异常信息的统一处理和维护。 说了一大堆,就一句话,设计和使用统一异常处...

chegy218的博客 220

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

springmvc统一异常处理

SpringMvc统一异常处理@RestControllerAdvice 统一异常处理主要是防止项目未捕获的异常直接返回给用户,给用户不好的体验和暴露细节。 还需要配合@ExceptionHandler注解细化异常的处理,翻看@RestControllerAdvice注解源码是包含@ResponseBody和@ControllerAdvice注解的, 所以无需在方法中添加@ResponseBody注解,即可返回json数据 @Slf4j @RestControllerAdvice public class

qq_34873843的博客 240

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SpringMVC框架08——统一异常处理

前言 在Spring MVC 应用的开发中,不管是对底层数据库操作,还是业务层或控制层操作,都会不可避免地遇到各种可预知的、不可预知的异常需要处理。如果每个过程都单独处理异常,那么系统的代码耦合度高,工作量大且不好统一,以后维护的工作量也很大。 在Spring MVC中提供了三种统一异常处理的方式,能够将所有类型的异常处理从各层中解耦出来,这样既保证了相关处理过程的功能单一,又实现了异常信息的统一处理和维护。 1、演示案例准备 为了验证Spring MVC 框架的3中异常处理方式,需要编写一个测试的应

zhangkongzhongyun的专栏 493

SpringMVC的统一异常处理

SpringMVC中提供了多种统一处理异常的方式,下面只是介绍部分方法。 1、通过SimpleMappingExceptionResolver类处理 使用org.springframework.web.servlet.handler.SimpleMappingExceptionResolver类统一处理异常需要在配置文件中配置异常类和View的对应关系。 即: <!-- 配置Simple...

qq_41193133的博客 229

SpringMVC控制器统一异常处理

SpringMVC控制器之统一异常处理SpringMVC控制器统一异常处理功能需求背景SpringMVC提供的统一异常处理统一异常处理的好处统一异常处理的三种方法1.存在缺陷的@ExceptionHandler2.配合使用@ControllerAdvice 与 @ExceptionHandler3.继承HandlerExceptionResolver接口 SpringMVC控制器统一异常处理 功能需求背景 在传统WEB项目中,异常的出现是频繁的,我们在MVC三层架构中一般采用把所有的异常都向上抛出到控制层进

qq_44808053的博客 288

SpringMVC-统一异常处理

SpringMVC-统一异常处理

qq_53098203的博客 630

dubbo SpringMVC 统一异常处理

https://zhuanlan.zhihu.com/p/111947357 前言 在一般的项目中,我们总是会遇到各种各样的异常,如果每次都用try-catch就太麻烦了,所以我们的系统中需要一种统一的异常处理,幸好这种问题早就有了解决方案。下面来了解一下SpringMVC 和 dubbo的解决方案 SpringMVC 统一异常处理 这里使用最简单的@ControllerAdvice和@ExceptionHandler来实现 @ControllerAdvice public class MyExceptio

龙门之上的博客 610

SpringMVC的全局统一异常处理

SpringMVC的全局统一异常处理 springmvc框架采用的是统一,全局的异常处理。 把controller中的所有异常处理都集中到一个地方。 采用的是aop的思想。 把业务逻辑和异常处理代码分开。解耦合。 异常处理步骤: 1.新建maven web项目 2.加入依赖 3.新建一个自定义异常类 MyUserException , 再定义它的子类NameException ,AgeException 4.在controller抛出NameException , AgeException 5.创建一个普通

weixin_45922059的博客 900

SpringMVC 使用注解统一异常处理

1 描述 系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的

风吹草动 4850

springMvc 控制层统一异常处理

1、控制层统一异常处理一般)e编写Try-catch来处理,我们发现处理Catch部分都差不多,相同的代码越来越多,造成冗余,SPRINGMVC提供了一个统一处理异常的机制。 2、方法,在Controller包中创建一个类:ExceptoncontrollerAdvice,统一异常处理类,加R上注解 @RestControllerAdvice @slf4j,到此这个类对控制层所有方法进行前置后置的增强。其中第一个方法如下: @ExceptionHandler public R handlerServi

okludawei的博客 247

SpringMVC之带数据与统一异常处理问题

文章目录springMVC带数据给jsp页面统一异常处理 springMVC带数据给jsp页面 第一种方式:通过reqeust域 @RequestMapping(value = &quot;/test5&quot;) public String test5(String user, String pwd,HttpServletRequest request){ request.setAttribute(&quot;use...

张议的博客 251

springmvc统一异常处理解决方法

Controller层的异常统一处理及返回 一、为什么要做这件事? 不知道你平时在写Controller层接口的时候,有没有注意过抛出异常该怎么处理,是否第一反应是想着用个try-catch来捕获异常? 但是这样地处理只适合那种编译器主动提示的检查时异常,因为你不用try-catch就过不了编译检查,所以你能主动地抓获异常并进行处理。但是,如果存在运行时异常且你没有来得及想到去处理它的时候会发生什...

weixin_43418984的博客 349
上一篇: Spring MVC的国际化
下一篇: Spring mvc出现404的几个原因
皮皮大虾
博客等级 码龄7年 6粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值