当前位置: 首页 > news >正文

SpringMVC全局异常处理

一、Java中的异常

定义:异常是程序在运行过程中出现的一些错误,使用面向对象思想把这些错误用类来描述,那么一旦产生一个错误,即创建某一个错误的对象,这个对象就是异常对象。

类型:

声明异常:在每个方法声明中,使用键字throws标识该方法可能抛出的必检异常的类型称为声明异常,如此告知方法的调用者该方法内可能有此类异常。

public void myMethod() throws IOException {     //some code }

抛出异常:当检测到错误的程序可以创建一个合适的异常类型的实例并抛出它就叫做抛出一个异常。

IllegalArgumentException ex=new II1egalArgumentException("EX Msg"); throw ex; 或者 throw new IllegalArgumentException("EX Msg");

捕获异常:当抛出一个异常时,可以在try-catch代码块中捕获和处理。try语句块中是可能出现问题的代码;catch语句块中是出现问题并捕获后,处理问题的代码内容,如果问题在try语句块中没有出现则catch中语句不会运行;finally语句块中是不管问题异常是否产生都要执行的代码内容。

try{    

        codeA;//业务代码A    

throw new BizException(“邮箱格式错误!”);//抛出异常    

codeB;//业务代码B

} catch(Exception e) {    

codeC;//处理异常代码

} finally {    

codeD;//关闭资源(IO 数据库 网络),收尾处理的一些工作

}

自定义异常:

二、SpringMVC异常处理

        编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。在开发中,不管是Dao层、Service层还是Controller层,都有可能抛出异常。在SpringMVC中,能将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。使用一个友好的页面显示,而不是一堆看不懂的错误信息。

全局统一异常实现方式

自带的SimpleMappingExceptionResolver

实现HandlerExceptionResolver接口

@ControllerAdvice + @ExceptionHandler注解

1、方式一:默认异常处理器

2、方式二:实现HandlerExceptionResolver接口

(1)创建异常处理器:在工程中创建GlobalExceptionResolver异常处理器类,捕获异常后页面跳转到error页面。

(2)注册异常处理器Bean:在spring-mvc.xml中,注册定义的GlobalExceptionResolver处理器。

或者在自定义异常处理类上添加@Component注解

(3)自定义异常类:创建自定义BizException异常类,业务代码统一使用自定义异常BizException抛出错误信息。

(4)定义业务处理器方法:在Controller中,定义获取图书信息方法,并返回结果。如果图书ID传入大于100时,抛出数据获取异常信息。

(5)创建异常显示视图:使用error.jsp页面统一显示系统中出现的异常信息。

3、方式三:@ControllerAdvice+@ExceptionHandler

(1)创建异常处理器:创建GlobalExceptionHandler异常处理器类,根据捕获的不同异常,并返回相应的异常信息。

(2)定义业务处理器方法:在Controller中,定义获取图书信息方法,并返回结果。如果图书ID传入大于100时,抛出数据获取异常信息。

        全局异常处理只能捕获Controller层未捕获(或往外抛)的异常,对于 Interceptor层的异常,或Spring框架层的异常,就无能为力了。

相关文章:

SpringMVC全局异常处理

一、Java中的异常 定义:异常是程序在运行过程中出现的一些错误,使用面向对象思想把这些错误用类来描述,那么一旦产生一个错误,即创建某一个错误的对象,这个对象就是异常对象。 类型: 声明异常&#xff1…...

出海服务器可以用国内云防护吗

随着企业国际化进程的加速,越来越多的企业选择将业务部署到海外服务器上,以便更贴近国际市场。然而,海外服务器也面临着来自全球各地的安全威胁和网络攻击。当出海服务器遭受攻击时,是否可以借助国内的云服务器来进行有效的防护呢…...

从零开始的使用SpringBoot和WebSocket打造实时共享文档应用

在现代应用中,实时协作已经成为了非常重要的功能,尤其是在文档编辑、聊天系统和在线编程等场景中。通过实时共享文档,多个用户可以同时对同一份文档进行编辑,并能看到其他人的编辑内容。这种功能广泛应用于 Google Docs、Notion 等…...

Ant Design Pro实战--day01

下载nvm https://nvm.uihtm.com/nvm-1.1.12-setup.zip 下载node.js 16.16.0 //非此版本会报错 nvm install 16.16.0 安装Ant Design pro //安装脚手架 npm i ant-design/pro-cli -g //下载项目 pro create myapp //选择版本 simple 安装依赖 npm install 启动umi yarn add u…...

pcl点云库离线版本构建

某天在摸鱼的小邓接到任务需要进行点云数据的去噪,在万能的github中发现如下pcl库非常好使,so有了此, 1.下载vs2017连接如下: ed2k://|file|mu_visual_studio_community_2017_version_15.1_x86_x64_10254689.exe|1037144|12F5C1…...

字节高频算法面试题:小于 n 的最大数

问题描述(感觉n的位数需要大于等于2,因为n的位数1的话会有点问题,“且无重复”是指nums中存在重复,但是最后返回的小于n最大数是可以重复使用nums中的元素的): 思路: 先对nums倒序排序 暴力回…...

ElasticSearch常见面试题汇总

一、ElasticSearch基础: 1、什么是Elasticsearch: Elasticsearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎,每个字段都被索引并可被搜索,可以快速存储、搜索、分析海量的数据。 全文检索是指对每一个词建立一个索引…...

Spring Boot如何实现防盗链

一、什么是盗链 盗链是个什么操作,看一下百度给出的解释:盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的…...

工作中常用springboot启动后执行的方法

前言: 工作中难免会遇到一些,程序启动之后需要提前执行的需求。 例如: 初始化缓存:在启动时加载必要的缓存数据。定时任务创建或启动:程序启动后创建或启动定时任务。程序启动完成通知:程序启动完成后通…...

力扣-图论-3【算法学习day.53】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...

Linux上的C语言编程实践

说明: 这是个人对该在Linux平台上的C语言学习网站笨办法学C上的每一个练习章节附加题的解析和回答 ex1: 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后运行它看看发生了什么。 vim ex1.c打开 ex1.c 文件。假如我们删除 return 0…...

芝法酱学习笔记(1.3)——SpringBoot+mybatis plus+atomikos实现多数据源事务

一、前言 1.1 业务需求 之前我们在讲解注册和登录的时候,有一个重要的技术点忽略了过去。那就是多数据源的事务问题。 按照我们的业务需求,monitor服务可能涉及同时对监控中心数据库和企业中心数据库进行操作,而我们希望这样的操作在一个事…...

【计算机网络】实验12:网际控制报文协议ICMP的应用

实验12 网际控制报文协议ICMP的应用 一、实验目的 验证ping命令和tracert命令的工作原理。 二、实验环境 Cisco Packet Tracer模拟器 三、实验过程 1.构建网络拓扑并进行信息标注,将所需要配置的IP地址写在对应的主机或者路由器旁边,如图1所示。 图…...

收缩 tempdb 数据库

1、 本文内容 注解使用 ALTER DATABASE 命令使用 DBCC SHRINKDATABASE 命令使用 DBCC SHRINKFILE 命令运行收缩操作时出现错误 8909 适用于: SQL ServerAzure SQL 托管实例 本文讨论可用于收缩 SQL Server 中 tempdb 数据库的各种方法。 可以使用下列任一方法来…...

kubesphere搭建 postgres15

创建configMap POSTGRES_PASSWORD数据库密码 PGDATA数据目录 创建【有状态副本集】工作负载 1.创建基本信息 2.容器组设置 配置环境变量 3.存储设置 完成之后点击下一步 配置服务 创建服务 配置基本信息 配置服务信息 外部访问选择nodePort,然后点击…...

解决npm问题用到的资源,错误原因和方法

资源: 1.node版本管理工具nvm: 下载地址:https://nvm.uihtm.com/nvm-1.1.12-setup.zip 使用方法:https://nvm.uihtm.com/ 2.node各版本: https://nodejs.org/en/about/previous-releases 3.nodejs: 下载地址:https://…...

【uni-app 微信小程序】新版本发布提示用户进行更新

知识准备 uni.getUpdateManager文档介绍 不支持APP与H5,所以在使用的时候要做好平台类型的判断,如何判断,参考条件编译处理多端差异 代码参考 export const updateApp () > {const updateManager uni.getUpdateManager()updateManag…...

Redis性能优化18招

Redis性能优化的18招 目录 前言选择合适的数据结构避免使用过大的key和value[使用Redis Pipeline](#使用Redis Pipeline)控制连接数量合理使用过期策略使用Redis集群充分利用内存优化使用Lua脚本监控与调优避免热点key使用压缩使用Geo位置功能控制数据的持久化尽量减少事务使…...

ElasticSearch 与向量数据库的结合实践:突破亿级大表查询瓶颈20241204

💡 ElasticSearch 与向量数据库的结合实践:突破亿级大表查询瓶颈 📚 引言 随着业务规模的不断扩大,传统关系型数据库在处理 亿级大表 时,性能瓶颈愈加凸显。关键词检索、模糊查询、多条件筛选等需求逐步升级&#xff…...

C#实现一个HttpClient集成通义千问-流式输出内容提取

返回对象处理 返回对象分析 根据流式返回的数据处理 内容对象 {"choices": [{"delta": { "content": "", "role": "assistant" },"index": 0,"logprobs": null,"finish_reason"…...

【实战指南】SVN SSL协议不兼容问题:从TLS版本冲突到降级解决方案

1. 当SVN遇上SSL:TLS协议冲突的典型症状 最近在帮团队排查SVN代码拉取问题时,遇到了一个经典的错误提示:"error running context: an error occurred during ssl communication"。这个看似简单的报错背后,其实是现代加密…...

AI大模型岗位薪资揭秘:2026大模型岗位薪资,非常详细收藏我这一篇就够了

1. AI系统架构师 薪资范围:100万 - 200万/年 职位要求:需要具备全面的技术背景,精通系统架构设计,能够有效整合AI技术,提升系统性能。要求硕士及以上学历,计算机科学或相关专业背景。 目标院校&#xff1…...

SpringBoot3 + JetCache实战:如何用两级缓存把接口性能提升10倍?

SpringBoot3 JetCache实战:高并发场景下的缓存架构设计与性能优化 在电商秒杀、实时数据查询等高并发场景中,传统数据库直接承受流量冲击往往会导致系统崩溃。去年双十一期间,某头部电商平台通过多级缓存架构成功扛住了每秒百万级的查询请求…...

抖音批量下载终极指南:免费无水印视频一键获取

抖音批量下载终极指南:免费无水印视频一键获取 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 你是否曾为保存喜欢的抖音视频而烦恼?面对心仪的内容创作者,想要收藏他们的…...

UniApp+Vue3避坑指南:为什么getAppWebview会失效?从原理到解决方案

UniAppVue3深度解析:getAppWebview失效的底层逻辑与工程化解决方案 在UniApp与Vue3的技术栈组合中,不少开发者遭遇过getAppWebview神秘失效的困境。这个看似简单的API调用问题,背后却隐藏着Vue3响应式系统变革与UniApp多端渲染机制的深层交互…...

微信小程序--动态切换登录注册标签页

1、try.js的 1.1、data函数 添加 activeTab: login, // 当前激活的标签&#xff0c;默认为登录 1.2、添加一个函数 // 切换登录/注册标签switchTab(e) {const tab e.currentTarget.dataset.tab;this.setData({activeTab: tab});}, 2、try.wxml的代码 <!--pages/try/…...

DIY电源改造必备:TL594与SG3524 PWM控制器实战对比(附电路图)

DIY电源改造实战&#xff1a;TL594与SG3524 PWM控制器深度对比与电路设计指南 1. 从零认识PWM控制器的核心价值 在电子爱好者的工作台上&#xff0c;电源改造项目总是充满魅力与挑战。无论是将旧电脑电源改造成可调实验室电源&#xff0c;还是为自制音响系统设计高效供电模块&a…...

数字减影血管造影系统市场洞察:至2032年将攀升至557.6亿元

据恒州诚思最新调研数据显示&#xff0c;2025年全球数字减影血管造影系统&#xff08;DSA&#xff09;市场规模预计达386.7亿元&#xff0c;至2032年将攀升至557.6亿元&#xff0c;2026-2032年复合增长率&#xff08;CAGR&#xff09;为5.5%。这一增长受全球老龄化加速、心血管…...

SWF逆向工程行业报告:JPEXS Free Flash Decompiler市场份额2025深度分析

SWF逆向工程行业报告&#xff1a;JPEXS Free Flash Decompiler市场份额2025深度分析 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 在Flash技术逐渐退出主流但仍有大量历史资产需要维护…...

给渗透新手的保姆级指南:用Kali和MSF搞定VulnHub经典靶机DC-1

Kali Linux渗透测试实战&#xff1a;从零攻破VulnHub DC-1靶机 环境准备与靶机配置 在开始渗透测试之前&#xff0c;确保你已经准备好以下工具和环境。Kali Linux作为渗透测试的标准发行版&#xff0c;集成了我们所需的所有工具。DC-1是Vulnhub上一个专为渗透测试练习设计的靶机…...