Spring Boot 入门之路(9)--- 全局异常处理方案

【Spring Boot 3】【Web】全局异常处理 本文介绍开发 Spring Boot Web 应用时如何捕获和处理全局异常。结合使用(或)和可以拦截处理指定 Controller 中的指定异常。(或)是 Controller 增强器,通过面向切面编程(AOP)给 Controller 添加统一的处理逻辑。可以通过namevalue等属性指定拦截的 Controller 范围;指定拦截处理的异常类型,只有一个数组类型参数value,可以接受一个或多个Throwable异常类型。 阅读详情

当 web 程序发生了异常,往往会在客户端直接显示 “Whitelabel Error Page” 页面,十分的不美观。因此,每一个 web 程序都需要通过一个统一的全局异常处理方案来保证客户端能够收到友好的提示。

1 Spring Boot 默认的异常处理机制

当浏览器客户端请求一个不存在的页面或服务端处理发生异常时,Spring Boot 默认会响应一个 html 文档内容,称作“Whitelabel Error Page”。

我们先写一个控制器,故意让它产生一个错误

@Controller
public class IndexController {

	@RequestMapping("index")
    public String index(){
		int i = 1/0;
        return "index" ;
	}
}

然后我们打开浏览器,发现页面如下:
在这里插入图片描述

2 通过 @ControllerAdvice 注解来处理异常

我们可以使用 @ControllerAdvice 注解和 @ExceptionHandler 注解来实现对指定异常的特殊处理。如果我们需要局部异常处理,使用 @Controller + @ExceptionHandler 即可,若需要全局异常处理,则应该使用 @ControllerAdvice + @ExceptionHandler。

局部异常处理

局部异常处理需要使用 @ExceptionHandler 注解,注解到类的方法上,当此注解里定义的异常抛出时,此方法会被执行。如果 @ExceptionHandler 所在的类是 @Controller ,则此方法只作用在此类。如果 @ExceptionHandler 所在的类带有 @ControllerAdvice 注解,则此方法会作用在全局。

举个例子,我们修改下上面使用过的控制器,使用 @ExceptionHandler 来捕捉异常

@Controller
public class IndexController {

	@RequestMapping("index")
    public String index(){
		int i = 1/0;
        return "index" ;
	}
	
	@ExceptionHandler(Exception.class) 
    @ResponseBody 
    public String exHandler(Exception e){ 
      if(e instanceof ArithmeticException){ 
          return "/ by zero"; 
      } 
      return "others"; 
    }
}

然后我们再次打开浏览器
在这里插入图片描述
发现该异常已被 @ExceptionHandler 处理,且将错误信息输出到客户端中。

全局异常处理

@ControllerAdvice 注解新增于 spring 3.2。

我们需要注意,唯有进入 Controller 层的错误才会由 @ControllerAdvice 处理,拦截器抛出的错误以及访问错误地址的情况将会由 SpringBoot 默认的异常处理机制处理。

我们创建一个全局异常处理类

@ControllerAdvice
public class ExceptionAdvice {

	@ResponseBody
    @ExceptionHandler(value = Exception.class)
    public Map<String,Object> exceptionHandler(Exception ex){
        Map<String,Object> map  = new HashMap<String,Object>();
        map.put("message", ex.getMessage());
        map.put("localizedmessage", ex.getLocalizedMessage());
        map.put("class", ex.getClass());
        map.put("stacktrace", ex.getStackTrace());
        map.put("suppressed", ex.getSuppressed());
        return map;
     }

}

当控制器抛出异常时,在客户端中显示
在这里插入图片描述

本文只是简单地介绍了 Spring Boot 中的全局异常处理方案,若有不足之处希望大家能在评论中指出,感谢各位的观看。

【java】[validation校验]----《Spring Boot 3 整合 Validation:注解使用、全局异常处理与自定义校验》 本文介绍了在Spring Boot 3中整合Validation框架实现参数校验的方法。主要内容包括:1)添加spring-boot-starter-validation依赖;2)在实体类字段上使用Jakarta EE 9+的校验注解(如@NotBlank、@Size等);3)通过全局异常处理器统一处理MethodArgumentNotValidException和ConstraintViolationException两种校验异常;4)提供统一的错误响应格式。文章还给出了测试示例,展示了如何验证参数校验功 阅读详情

相关推荐

SpringBoot处理全局异常详解(全面详细+Gitee源码)

我们对常见的七种异常情况统一进行处理,这次的主角就是@RestControllerAdvice这个注解,这个一个组合注解由@ControllerAdvice和@ResponseBody组成,@RestControllerAdvice会帮助我们把信息转成json格式返回。在全局异常处理类只需要在类上标注@RestControllerAdvice,并在处理相应异常的方法上使用@ExceptionHandler注解,写明处理哪个异常即可。注:异常的拦截有顺序,子类异常会优先匹配子类异常处理器。

黄团团的个人博客 2904

SpringBoot全局异常处理

SpringBoot全局异常处理

骑个小蜗牛的博客 4万+

初学者入门机器学习 (ML)的推荐教程

了解基本的机器学习概念并不难。有大量免费的在线博客文章、视频和编码教程可以引导您了解基础知识——从介绍性内容到常见应用程序,再到算法和应用技能。这篇文章总结了一些用于介绍 ML 的最佳免费选项。它按逻辑顺序排列,每个概念都建立在上一个概念的基础上。

u010542847的博客 4615

springboot全局异常处理详解

深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。@ModelAttribute本来作用是绑定键值对到Model中,当与@ControllerAdvice配合使用时,可以让全局的@RequestMapping都能获得在此处设置的键值对**(2)注解了@RestControllerAdvice的类的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上。...

m0_67401153的博客 5516

7 series FPGAs Transceiver Wizard IP核使用和测试

学习FPGA一段时间了,前面一直没有系统的总结,这学期把在项目中用到的IP核和一些调试过程中遇到的问题总结一下发出来,坚持下去,一起进步! 今天总结一下的GTH核的使用和测试。 软件版本:Vivado 2017.4 IP核版本:7 Series FPGAs Transceivers Wizard (3.6) FPGA:xc7vx690tfft1927 实现功能: 四路光纤数据接收,由于GTX IP...

qq_39921762的博客 1万+

深入解析UVM寄存器模型:reg2bus与bus2reg的隐式调用机制

本文深入解析了UVM寄存器模型中reg2bus与bus2reg函数的隐式调用机制。通过追踪一次寄存器访问的完整旅程,揭示了这两个关键函数是如何在uvm_reg_map和uvm_reg_predictor中被框架自动调用的,从而在抽象的寄存器操作与具体总线事务之间完成转换,并实现镜像值的自动更新。掌握此机制是高效调试和灵活应用UVM寄存器模型的基础。

weixin_29211309的博客 437

Spring Boot项目优雅的全局异常处理方式(全网最新)

在日常项目开发中,异常是常见的,但是如何更高效的处理好异常信息,让我们能快速定位到BUG,是很重要的,不仅能够提高我们的开发效率,还能让你代码看上去更舒服,SpringBoot的项目已经对有一定的异常处理了,但是对于我们开发者而言可能就不太合适了,因此我们需要对这些异常进行统一的捕获并处理。/*** @description: 自定义异常处理System . out . println("全局异常捕获>>>:" + e);

weixin_45131680的博客 3548

【深度学习】什么是交叉注意力机制?

输入序列:自注意力机制在同一个输入序列内建立注意力,交叉注意力机制在不同的输入序列间建立注意力。应用场景:自注意力机制多用于单一模态的任务(如纯文本任务),交叉注意力机制多用于多模态任务(如图像和文本的结合)。计算过程:自注意力机制的查询、键和值都来自同一个输入序列,而交叉注意力机制的查询来自一个输入序列,键和值来自另一个输入序列。

q742971636的博客 7365

SpringBoot——全局异常处理

SpringBoot提供了两个注解用于拦截异常 1、@ControllerAdvice:标注该类为全局异常处理类,默认拦截所有被触发的异常 2、@ExceptionHandler:标注方法,用于处理特定异常

生命的痕迹 4792

第一章 DRM 子系统概述:1.2 专栏定位与技术覆盖范围

本专栏系统解析Linux内核DRM图形子系统的核心技术,涵盖GEM对象管理、TTM内存机制、DRM-Fence同步等核心模块,深入剖析DMA-BUF共享、DMA_Resv资源管理等关键技术。通过解读内核源码与用户态接口(libdrm),结合进程管理、匿名inode等底层机制,构建完整的DRM知识体系。专栏兼顾深度与易懂性,辅以实际应用场景分析,既适合图形驱动开发新手入门,也可满足资深工程师进阶需求,帮助读者掌握从内核实现到应用开发的全栈知识。

图形/计算GPU的驱动与虚拟化技术分享园地 3019

Python爬虫实战:实时爬取东方财富网股票行情

东方财富网实时行情(价格、涨跌幅、成交量等)K线图、分时图、技术指标市盈率、换手率、总市值等指标相比某些收费API,东方财富网页端接口不需要登录、免费、响应快、封装清晰,适合爬虫实践。东方财富网股票数据接口分析实时数据抓取与字段提取数据结构化处理自动化批量抓取多线程加速采集数据可视化展示支持存储为CSV/Excel/数据库。

2201_76125261的博客 1万+

Spring Boot 全局异常处理与日志监控实战

构建一套健壮的全局异常处理方案,统一错误响应、可追踪的日志(requestId/MDC),并把异常上报为监控指标(使用 Micrometer),方便在生产环境定位与统计异常

学习编程的小羊的博客 3306

Linux(31)Rockchip RK3568 Ubuntu22.04上部署 Docker: 问题与解决方案

本博客在总结这些问题及其解决方案,为遇到类似问题的兄弟提供参考,如果我后续有碰到其他Docker 问题也会在此更新补充。

我其实什么都不会 1645

Spring Boot 全局异常处理策略设计(一):异常不只是 try-catch

Spring Boot 全局异常处理策略解析 本文系统介绍了Spring Boot中异常处理的核心理念与实现方案。首先指出异常处理不应局限于try-catch语法,而是Web系统失控时的关键兜底机制。文章分析了Java异常模型,强调异常传播的"反向调用链"特性,并揭示了try-catch的三个常见问题。 重点讲解了Spring MVC的异常处理架构,包括三种基础方式:直接抛出异常、@ExceptionHandler局部处理和@ControllerAdvice全局处理。其中@Control

Java、Python、AI、前沿技术等领域的技术总结和经验分享。 2266

# YOLOv11-seg改进系列 | 引入CVPR MetaFormer的C3k2_PoolingFormerCGLU模块,池化Token混合+CGLU门控MLP

本文引入 CVPR 2022 论文(MetaFormer/PoolFormer)提出的 MetaFormer 元架构设计,以Pooling Token 混合器 + ConvolutionalGLU(CGLU)MLP构成,将其封装为,用于替换 YOLOv11-seg 的 C3k2 块。对比维度C3k2(基线)C3k2_PoolingFormerCGLU(本文)参数量(n scale)2.46M≈2.49M9.6≈9.69.7(+1.0%)架构范式单阶段卷积MetaFormer 双阶段。

qq_44224801的博客 843

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

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

9.Spring Boot 全局异常处理@ControllerAdvice

玩转Spring Boot 全局异常处理 在开发中出现异常后,可能需要一个统一处理的地方,来处理程序出现的异常,针对不同的异常做不同的处理,这里我们通过@ExceptionHandler注解来实现。在WEB开发中,比如页面出入进来日期,需要进行一些转换那么这里使用@InitBinder注解来处理。上面说的是一些使用场景,接下来具体如何实现。 1.使用@ExceptionHandler当前Controller异常处理 @ExceptionHandler可以使用在任何用@Controller注

编码语言Codelang 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring Boot 全局异常处理问题分析与解决方案

摘要:本文分析了Spring Boot项目中全局异常处理器无法捕获过滤器异常的问题,并提出四种解决方案。问题表现为过滤器抛出的异常未被全局处理器捕获,导致响应格式不一致。解决方案包括:1) 在过滤器中手动处理异常;2) 使用ErrorController统一处理;3) 通过AOP切面拦截异常;4) 开发自定义异常处理框架。每种方案各有优缺点,开发者可根据项目需求选择合适的方法,确保整个应用的异常处理一致性。

wuxuanok的博客 1435

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

Spring Boot 3.x @RestControllerAdvice全局异常处理优先级问题详解

本文详细分析了Spring Boot 3.x中@RestControllerAdvice全局异常处理的优先级问题。主要内容包括: 问题背景:多个异常处理器间存在优先级冲突,导致异常被错误处理或执行顺序混乱。 问题现象:常见场景如处理器覆盖、异常匹配冲突、顺序混乱等,通过代码示例展示了优先级冲突情况。 原因分析:解析了Spring MVC异常处理机制、@RestControllerAdvice优先级规则以及Spring Boot 3.x的新变化。 解决方案:提出明确的@Order注解配置方案,包括基础优先级配

深山技术宅的博客 1454

Spring Boot 全局异常处理

Spring Boot 全局异常处理 前言 本篇文章主要介绍的是SpringBoot项目进行全局异常的处理。 SpringBoot全局异常准备 开发准备 环境要求 JDK:1.8 SpringBoot:1.5.17.RELEASE 首先还是Maven的相关依赖: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version&g

┄─━╋独特 1596

Spring Boot 全局异常处理策略设计(二):DispatcherServlet 与异常解析责任链源码解析

摘要:本文深入解析Spring Boot全局异常处理机制,重点剖析DispatcherServlet的核心作用及其异常处理流程。文章揭示了异常处理的责任链模式,详细介绍了HandlerExceptionResolver接口及其三个默认实现类的执行顺序和工作原理。通过源码分析,展示了Spring MVC如何将异常转换为响应,并强调这种设计的优雅之处在于其开闭原则的遵循和扩展性。最后提出后续需要深入探讨的问题,如@ExceptionHandler匹配机制和@ControllerAdvice的全局作用原理。

Java、Python、AI、前沿技术等领域的技术总结和经验分享。 2504

spring-boot-starter-validation数据校验全局异常拦截处理

继承RuntimeException,要知道,spring 对于 RuntimeException 异常才会进行事务回滚,所以要继承RuntimeException。} }ValidationExceptionHandle:校验异常统一拦截返回,定义在最前面OtherExceptionHandle:其他异常拦截,用于项目中其他异常的拦截返回FinalExceptionHandle:最终异常拦截,最后一道防线。@RestControllerAdvice是帮助我们把信息转成json格式返回。

tangyb828的博客 1万+

spring cloud gateway 全局异常处理

通常spring boot全局异常捕获我们通常会使用@ControllerAdvice进行全局捕获。 放到网关中显然不合适,@ControllerAdvice故名思意,是对controller的一个增强处理。所以在gateway中我们需要如下方式配置: 网关全局异常配置 /** * @calssName ExceptionConfig * @Description 网关全局异常配置 * @Author jiangshaoneng * @DATE 2020/9/28 19:36 */ @Conf.

放码过来 3119

【Spring Boot】全局异常处理:从0到1实战,手把手带你搞定

本文针对开发中常见的异常处理痛点,介绍如何通过Spring Boot全局异常处理实现代码优化。文章首先分析了传统try-catch方式的弊端:代码冗余、响应混乱、异常漏捕和日志难查。随后详细展示了从0到1搭建全局异常处理的完整流程。

JCoder的博客 1025

Spring Security- 自定义认证异常与全局异常处理

在现代 Java Web 应用开发中,安全机制是系统架构中不可或缺的一环。Spring Security 作为 Spring 生态中最主流的安全框架,提供了强大的身份认证(Authentication)和授权(Authorization)能力。然而,其默认的异常处理机制往往无法满足实际项目中对错误信息格式化、日志记录、前端友好提示等需求。本文将深入探讨如何在 Spring Boot + Spring Security 架构中实现自定义认证异常以及构建统一的全局异常处理机制。

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

Spring Boot 2.X REST 风格全局异常处理

文章目录1 摘要2 核心依赖3 核心代码3.1 接口返回码封装类3.2 接口返回结果封装类3.3 自义定异常类3.4 全局异常处理类3.5 配置文件4 测试4.1 抛出自定义异常4.2 抛出其他异常4.3 错误的请求方式4.4 向不接受文件参数的接口上传文件4.5 参数字段类型对不上4.6 上传文件为空4.7 缺少请求参数5 参考资料推荐6 ​ ​ 1 摘要 异常是程序的一部分,在项目运行时可能由...

Mrqiang9001 1458
上一篇: Spring Boot 入门之路(8)--- 解决 Spring Boot 中的跨域问题
下一篇: Spring Boot 入门之路(10)--- Spring Boot 中的定时任务
Geffin
博客等级 码龄8年 209粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值