spring 异常处理

spring统一异常处理 Respect 巨人大哥:https://www.cnblogs.com/jurendage/p/11255197.html 源码:结构 maven pom.xml <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> 阅读详情

一、通过HandlerExceptionResolver/SimpleMappingExceptionResolver来处理和分发各种异常:

来源:http://www.blogjava.net/wuxufeng8080/articles/191150.html

 

Web应用中对于异常的处理方式与其他形式的应用并没有太大的不同――通过try/catch
语句针对不同的异常进行相应处理。
但是在具体实现中,由于异常层次、种类繁杂,我们往往很难在Servlet、JSP层妥善的处
理好所有异常情况,代码中大量的try/catch代码显得尤为凌乱。
我们通常面对下面两个主要问题:
1. 对异常实现集中式处理
典型情况:对数据库异常记录错误日志。一般处理方法无外两种,一是在各处数据库
访问代码的异常处理中,加上日志记录语句。二是将在数据访问代码中将异常向上抛
出,并在上层结构中进行集中的日志记录处理。
第一种处理方法失之繁琐、并且导致系统难以维护,假设后继需求为“对于数据库异
常,需记录日志,并发送通知消息告知系统管理员”。我们不得不对分散在系统中的各
处代码进行整改,工作量庞大。
第二种处理方法实现了统一的异常处理,但如果缺乏设计,往往使得上层异常处理过
于复杂。
这里,我们需要的是一个设计清晰、成熟可靠的集中式异常处理方案。
2. 对未捕获异常的处理
对于Unchecked Exception而言,由于代码不强制捕获,往往被程序员所忽略,如果
运行期产生了Unchecked Exception,而代码中又没有进行相应的捕获和处理,则我
们可能不得不面对尴尬的500服务器内部错误提示页面。
这里,我们需要一个全面而有效的异常处理机制。
上面这两个问题,从技术角度上而言并算不上什么大的难点。套用一些短平快的设计模式,
我们也能进行处理并获得不错的效果。同时,目前大多数服务器也都支持在Web.xml中通过
<error-page>(Websphere/Weblogic)或者<error-code>(Tomcat)节点配置特定异常情
况的显示页面。
Spring MVC中提供了一个通用的异常处理机制,它提供了一个成熟的,简洁清晰的异常处
理方案。如果基于Spring MVC开发Web应用,那么利用这套现成的机制进行异常处理也更加自
然和有效。
Spring MVC中的异常处理:
以前面的注册系统为例,首先,在Dispatcher配置文件Config.xml中增加id为
“exceptionResolver”的bean定义:
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingEx
ceptionResolver">
<property name="defaultErrorView">
<value>failure</value>
</property>
<property name="exceptionMappings">
<props>
<prop key="java.sql.SQLException">showDBError</prop>
<prop key="java.lang.RuntimeException">showError</prop>
</props>
</property>
</bean>
通过SimpleMappingExceptionResolver我们可以将不同的异常映射到不同的jsp页
面(通过exceptionMappings属性的配置),同时我们也可以为所有的异常指定一个默认的异
常提示页面(通过defaultErrorView属性的配置),如果所抛出的异常在exceptionMappings
中没有对应的映射,则Spring将用此默认配置显示异常信息(注意这里配置的异常显示界面均
仅包括主文件名,至于文件路径和后缀已经在viewResolver中指定)。
一个典型的异常显示页面如下:
<html>
<head><title>Exception!</title></head>
<body>
<% Exception ex = (Exception)request.getAttribute("exception"); %>
<H2>Exception: <%= ex.getMessage();%></H2>
<P/>
<% ex.printStackTrace(new java.io.PrintWriter(out)); %>
</body>
</html>
exception 实在SimpleMappingExceptionResolver 被存放到request中的,具体可以查看源代码。
如果SimpleMappingExceptionResolver无法满足异常处理的需要,我们可以针对
HandlerExceptionResolver接口实现自己异常处理类,这同样非常简单(只需要实现一个
resolveException方法)。

如果有ViewResolver,则制定的jsp页面必须在那个页面下,到时候如果找不到页面,可以根据错误提示再调整页面路径

 

二、通过@ExceptionHandler在特定控制器中进行异常处理。

 

Java代码   收藏代码
  1. @Controller    
  2. public class MyController {    
  3.     
  4.         
  5.     /**  
  6.      * 用于处理异常的  
  7.      * @return  
  8.      */    
  9.     @ExceptionHandler(MyException.class)    
  10.     public String exception(MyException e) {    
  11.         System.out.println(e.getMessage());    
  12.         e.printStackTrace();    
  13.         return "exception";    
  14.     }    
  15.         
  16.     @RequestMapping("test")    
  17.     public void index() {    
  18.         throw new MyException("出错了!");    
  19.     }    
  20.         
  21.         
  22. }    

 

 在访问MyController的 index时报会抛出异常,而该控制器有个标识了@ExceptionHandler的异常处理方法,这时,该方法将被调用。

当然,个人觉得不好的地方也是很明显的,那就是异常处理必须与可能出现异常的方法在同一个控制器中。

Vivado ILA调试全攻略:从HDL实例化到Block Design的5个实战技巧 本文全面解析了Vivado集成逻辑分析仪(ILA)的五种核心调试方法,涵盖从HDL代码实例化到Block Design集成的实战技巧。详细对比了不同方法的优缺点与适用场景,并重点介绍了如何利用Debug Hub高效管理多时钟域复杂调试,旨在帮助FPGA开发者精准定位问题,显著提升板级调试效率。 阅读详情

相关推荐

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h

am_03的博客 3013

Controller 层返回值的公共包装类-避免每次都包装一次返回-InitializingBean增强

场景:在微服务中,一般返回数据都会有个返回码、返回信息和返回消息体,但是每次返回时候调用或者是封装,太过麻烦,有没有什么办法不用每次都封装呢? 答案是有的。 返回值对象 package com.study.auth.comm; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.serializer.Serialize..

hu10131013的博客 10万+

【CarMaker实战指南】从零构建环形测试场景与车辆连续仿真

本文详细介绍了如何使用CarMaker软件从零构建环形测试场景与实现车辆连续仿真。通过分步指导搭建闭环道路、连接交叉路口、规划车辆轨迹等核心操作,帮助用户掌握CarMaker的基础应用技巧,并提供了常见问题排查与进阶优化建议,适用于车辆耐久性测试和自动驾驶算法验证等场景。

weixin_29274969的博客 235

java处理异常的标准格式

java异常处理的标准格式代码

macfuliming的博客 1121

conda install出现CondaValueError: Malformed version string invalid character(s)解决方案

本文主要介绍了conda install出现Solving environment:failed、CondaValueError: Malformed version string invalid character(s),希望能对新手有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 步骤一 2.2 步骤二 2.3 步骤三

weixin_43178406的博客 6万+

详细解读经典跨模态对齐技术Q-Former代码

介绍BLIP2的博客层出不穷,介绍Q-Former的博客也不少,但是详细解读Q-Former代码的博客很少。这篇博客希望以代码为基础,讲明白Q-Former的原理和核心思想,并详细解读一些值得注意的细节。希望读者们能从这一经典技术中朝花夕拾,得到启发。

沉迷单车的追风少年 2461

Spring MVC异常处理

Spring MVC异常处理 Web应用中对于异常的处理方式与其他形式的应用并没有太大的不同――通过try/catch 语句针对不同的异常进行相应处理。 但是在具体实现中,由于异常层次、种类繁杂,我们往往很难在Servlet、JSP层妥善的处 理好所有异常情况,代码中大量的try/catch代码显得尤为凌乱。 我们通常面对下面两个主要问题: 1. 对异常实现集中式处理 典型情况:对数...

zxl10059的专栏 262

OpenClaw进阶实战(二十五):抖音企业号——私信回复与视频评论分析

本文介绍了抖音企业号自动化运营的技术方案,重点解决私信互动效率低和风控严格两大挑战。文章分析了抖音集成的三大技术壁垒(视频复杂性、风控体系、封闭API)并对比了三种技术路径的优缺点。针对不同规模的运营主体,推荐官方API+RPA混合架构或真机RPA+AI辅助的方案。 详细讲解了环境准备步骤,包括抖音Skill安装、Cookie获取和配置文件设置。核心实现部分展示了私信自动回复功能的安全合规实现,包含意图分类、优先级排序、延迟发送等防封禁机制,并提供了完整的Python代码示例。该方案通过模拟人工操作、限制日

PeterPan的博客 159

Spring事务管理之几种方式实现事务(转)

转自 一:事务认识 大家所了解的事务Transaction,它是一些列严密操作动作,要么都操作完成,要么都回滚撤销。Spring事务管理基于底层数据库本身的事务处理机制。数据库事务的基础,是掌握Spring事务管理的基础。这篇总结下Spring事务。 事务具备ACID四种特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持...

sinat_34966486的博客 411

innovus:像ICC2一样设置placement label

ICC2有placement label/placement rule功能,能控制各种类型cell 之间的spacing规则,包括top和bottom edge的spacing。innovus也有相同的功能,以下示例方便大家了解用法。我们需要给所有OAI* cell之间设置一个spacing rule,让他们不要上下或者挨着。效果如下图,这个spacing指的是同一边的间距,不是cell间距。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 834

2022年灌溉试验设计与数据分析考试试题

2.表2数据为表层0~10cm的原状土离心机土壤水分特征曲线试验数据,(1)请利用R语言nls函数通过Van Genuchten方程对土壤体积含水率和土壤基质势进行拟合;(3)指明土壤基值势为-33 kPa和-1500kPa时的体积含水率。1.请根据表1数据,以灌溉模式为主区,生物炭用量为子区,利用R语言agricolae包生成裂区试验设计试验处理布置图;3.以R工具包factoextra中decathlon2数据集前10列为数据进行PCA分析,要求计算出(1)前5个主成分的特征值、特征向量;

Mrrunsen的博客 266

王和平的spring自定义异常处理

import com.itheima.health.common.MessageConst; import com.itheima.health.entity.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.converter.HttpMessageConversionException; import org.sprin

王和平的第三个果园 211

YOLO由浅入深,最简单地说明白YOLO基本实现原理

YOLO(You Only Look Once)是一种高效的实时目标检测技术,广泛应用于自动驾驶、监控和无人机等领域。其核心优势在于速度快,能够在视频流中实时识别目标并标出其位置、大小、类别及置信度。YOLO基于卷积神经网络(CNN),通过卷积层提取图像特征,池化层和扁平化层优化特征处理,全连接层进行分类。与传统方法不同,YOLO将图像分割成多个网格,每个网格预测多个边界框及其置信度,仅对高置信度的框进行详细计算,从而快速确定目标的位置和类别。这种机制使得YOLO在保持高准确率的同时,实现了高效的实时处理能

qq_30279827的博客 566

spring异常处理

在项目中采用spring的异常处理机制:示例一、在Controller中加@ExceptionHandler注解定义异常拦截的方法,在方法中定义返回的页面: error.jsp 示例二、将异常处理做成一个公共的: 效果:两者区别:示例一只能捕获所属Controller中的方法抛出的异常,不能捕获其他Controller中的,示例二可以捕获所有Controller抛出的异常。下面看源码分析: 由handlerAdapter进行反射调用后,调到controller中的具体方法,抛出的异常最终被捕获,

weixin_38441454的博客 3305

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

掌握 Spring 之异常处理

前言 这次我们学习 Spring 的异常处理,作为一个 Spring 为基础框架的 Web 程序,如果不对程序中出现的异常进行适当的处理比如异常信息友好化,记录异常日志等等,直接将异常信息返回给客户端展示给用户,对用户体验有不好的影响。所以本篇文章主要探讨通过 Spring 进行统一异常处理的几种方式实现,以更优雅的方式捕获程序发生的异常信息并进行适当的处理响应给客户端。 本文主要内容涉及如下:...

weixin_34124651的博客 224

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring 五种常见的异常处理方式

异常处理 能够给Controller加切面的机制都能变相的进行统一异常处理,比如之前通过 AOP 实现的全局统一的异常处理:Spring aop 统一异常处理和日志输出。 这里总结一下,其他常用的异常处理方式。 接下来主要介绍五种处理异常的方式: HandlerExceptionResolver @ControllerAdvice 与 @ExceptionHandler ResponseEntityExceptionHandler ResponseStatusException ErrorControll

MOKE_SPACE 1983

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spring 异常处理三种方式

Spring 异常处理三种方式 异常处理方式一. @ExceptionHandler 异常处理方式二. 实现HandlerExceptionResolver接口 异常处理方式三. @ControllerAdvice+@ExceptionHandler 三种方式比较说明(强烈推荐各位看一下,我觉得自己总结的比较多,嘿嘿,不对之处请指出) 问题描述: 假如对异常不进行处理? 假如SpringMvc我们不对异常进行任何处理, 界面上显示的是这样的. 异常处理的方式有三种: 一. Controller层面上异

qq_43842093的博客 3514

Spring 异常处理的各种姿势

1. 前言统一的异常处理对于应用的重要性不言而喻。今天我们来介绍一下 Spring 如何来进行统一的 Rest 异常处理。同时我们也会简单比较一下它们之间的优劣。2. @Controller 结合 @ExceptionHandler在控制器中声明一个方法然后用 @ExceptionHandler 注解标记即可: @Controller @RequestMapping("/test") publ...

码农小胖哥 947

Spring-异常处理(10种讲解)

@ResponseStatus设置 HTTP 控制器级@ExceptionHandler HandlerExceptionResolver接口 使用注解实现异常分类管理(@ControllerAdvice 和 @ExceptionHandler) 使用 @ControllerAdvice 对不同的 Controller 分别捕获异常并处理 ResponseStatusException Spring Web MVC 中的异常处理流程 继承 ResponseEntityExceptionHandler

汤键的博客 4万+

spring异常处理机制

点击阅读原文Spring提供了一系列健全的异常处理框架。我们可以采用@ResponseStatus,@ExceptionHandler,HandlerExceptionResolver以及 @ControllerAdvice处理异常。@ResponseStatus可以为异常指定状态码,可以应用到用户定义的异常类以及controller中被@ExceptionHandler注解的方法上。在contr...

Miao_W的专栏 7359

浅析 Spring 异常处理

深入理解 Spring 异常处理

zest 666

一起学 Spring 之异常处理

文章目录前言正文HandlerExceptionResolver 扩展@ExceptionHandler@ControllerAdviceResponseEntityExceptionHandler 扩展ResponseStatusExceptionSpring Boot ErrorController结语参考 前言 这次我们学习 Spring 的异常处理,作为一个 Spring 为基础框架的 ...

one的博客 247

Spring 异常处理 和 原生servlet异常处理

Spring 异常处理 配置spring-mvc.xml 同普通的SpringVC配置 配置web.xml 同普通的SpringVC配置 演示 局部异常处理 UserHandler @Controller //纳入容器 @RequestMapping("/user") //访问路径 public class UserHandler { @RequestMapping("login") pub...

574

Spring的异常处理

各个层都可能出现异常,在Spring中将所有异常都往上抛,最后在异常处理器统一处理。

机械工程跑路哥 892

Spring 4 异常处理

Spring 4 异常处理

wangchaoqi1985的博客 80
上一篇: Log4j 配置
下一篇: JDK内存管理工具
无聊的读书人
博客等级 码龄16年 3粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值