Spring Boot2.0之全局捕获异常

【SpringBoot】SpringBoot 之 使用AOP技术 全局捕获异常 本文源码:https://github.com/SsRong/springboot2.0-ssrtest02 1、全局捕获异常:整个Web请求项目 全局捕获异常 1.1、应用场景:如果在我们的一个类的方法中出现异常(以项目中的ErrorController为例),那么在用户请求页面时则会报出原生的英文404错误。因此我们需要使用到try catch来把异常抛出。 1.2、但如果我们需要用到异... 阅读详情

Spring Boot2.0之全局捕获异常

全局捕获异常,很明显的错误404返回给客户,很不好呀。整个web请求项目全局捕获异常,比如空指针直接返回给客户啊,那多操蛋呀~

 

看这几个常用的注解:

@ExceptionHandler 表示拦截异常

  • @ControllerAdvice 是 controller 的一个辅助类,最常用的就是作为全局异常处理的切面类
  • @ControllerAdvice 可以指定扫描范围
  • @ControllerAdvice 约定了几种可行的返回值,如果是直接返回 model 类的话,需要使用 @ResponseBody 进行 json 转换
  • 返回 String,表示跳到某个 view
  • 返回 modelAndView
  • 返回 model + @ResponseBody

创建meven工程。pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>ErrorCatch</groupId>
  <artifactId>com.toov5.ErrorCatch</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies> 
  
</project>

 Java类

package com.toov5.ErrorCatch;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
//以后经常做为服务异常捕获,要经常用到这个注解
public class ErrorCatch {
    @RequestMapping("/getUser")
    public String getUser(int i ){
        int j = 1/i;
        return "返回"+j;
        
    }
    
}

项目目录结构:

启动,访问:

图2丑陋的页面出来了,用户体验很瞎眼(这算是个用户体验哈)~~

解决方案1: try catch 

public class ErrorCatch {
    @RequestMapping("/getUser")
    public String getUser(int i ){
        int j = 0;
        try {
             j = 1/i;
            
        } catch (Exception e) {
            return "不好意思啊客户!~";
        }
        
        return "返回"+j;
    }
    
}

如果每个错误,都要这样。。。。。那不蛋疼了啊~开发可要累死了

解决方案二 全局捕获异常   

 使用aop技术,采用异常通知

Spring Boot提供了支持,

首先建立一个类型,专门用来处理异常的

废话不多说,实战!

首先创建一个包 error(用来放异常捕获类的)

然后创建异常捕获类:

  1、返回json格式

  2、返回页面

首先创建类:

package com.toov5.error;

import java.util.HashMap;
import java.util.Map;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice(basePackages="com.toov5.ErrorCatch")  //SpringBoot的异常切入点。此包下的包揽了哈
public class GlobalException {

   @ResponseBody  //返回jsoon给客户端
   public Map<String, Object> exceptionHandler(){
       Map<String, Object> map = new HashMap<String, Object>();
       map.put("errorCode", "666");
       map.put("errorMsg", "不好意思啊");
       return map;
       
   }
    
    
}

 @ExceptionHandler(RuntimeException.class) 这个注解表示运行时异常

注意 原java类文件去掉try catch

package com.toov5.ErrorCatch;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController //以后经常做微服务异常捕获,要经常用到这个注解
public class ErrorCatch {
    @RequestMapping("/getUser")
    public String getUser(int i ){
        int j = 1/i;    
        return "返回"+j;
    }
     
}

小伙伴们注意了啊~~~

我在给大家写教程时候,发现了一个小问题,初学者们要注意了哦~!

@controlleradvice注解不起作用,Spring要扫描到!我这里的之前的目录结构不更改的前提下:

应该这样:

一定要把 

GlobalException这个类扫到呀!!!

重启后,访问:

 

 

 

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

相关推荐

SpringBoot全局异常捕获及处理(包括自定义异常捕获处理)

在做项目的时候需要对自定义异常做捕获和处理,现在将代码记录下来便于以后查阅。 1、全局异常捕捉处理 @ControllerAdvice( annotations = {RestController.class} ) public class ExceptionHandlerAdvice { private static final Logger LOGGER = L...

专注基础架构领域 8410

Springboot2.0全局异常捕捉处理和自定义全局异常处理

一,全局异常捕捉处理 新建MyControllerAdvice类,建在包下都有作用: import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframew...

飞奔的波大爷的博客 2万+

Coze知识库搭建:智能化管理与高效检索实践

知识管理系统是现代企业信息资产管理的核心基础设施,其核心原理是通过结构化存储和智能检索技术实现知识的快速流转。在技术实现上,基于NLP的语义理解引擎和知识图谱构建是关键,能够显著提升检索准确率和知识关联性。以Coze平台为例,其针对中文场景优化的分词算法和多模态处理能力,可有效解决技术文档管理中的术语识别和格式兼容问题。这类系统在开发团队知识沉淀、新员工培训等场景中价值显著,特别是当集成RBAC权限模型和自动化备份策略后,既能保障信息安全,又能实现持续的知识迭代。通过合理配置同义词扩展和权重调整,可使搜索命

weixin_29041195的博客 262

springboot 2 处理全局异常 及 404 4xx错误的异常捕获

1. 全局异常的处理, 由于网上相关的说明太多,相关说明不在赘述. @ExceptionHandler(value = Exception.class) public ResponseData onException(HttpServletRequest request, Exception e){ logger.error("", e); ...

____DancingWolf 4678

CloudCompare实战:5分钟搞定点云数据预处理(含常见格式转换技巧)

本文提供了一套基于CloudCompare的5分钟点云数据预处理实战指南。文章详细讲解了如何利用这款开源工具,快速完成点云数据的格式转换(如LAS转PLY)、统计离群值降噪、体素网格下采样以及交互式裁剪等核心操作,帮助用户高效清理和规整杂乱数据,为后续分析建模奠定基础。

weixin_29207533的博客 477

Infineon MOSFET开关损耗计算实战指南

本文是英飞凌MOSFET开关损耗计算的实战指南。针对MOSFET发热问题,文章深入剖析了开关损耗的产生机理,并基于Infineon数据手册的关键参数,手把手推导了开通与关断损耗的工程计算公式。同时,指南强调了栅极电阻、寄生参数等实际因素对损耗的影响,并提供了从理论计算到实测优化的完整路径,帮助工程师精准评估与优化电源设计。

weixin_29212867的博客 443

springboot封装异常(捕获全局异常,做相应处理)

1.重写ESSException import lombok.Data; import risktech.learning.common.Result; /** * @author cs * @time 2018/3/6 */ @Data public class SignInvalidException extends ESSException { private Resu...

一个有梦想的混子 1823

自学ROS完成智能小车路径规划(一)--配置功能包

此系列文章记录本人学习ros的过程,将会尽可能详细以便自己能够看懂 参考系列:古月居老师,优快云,ROS tutorials,科大讯飞智能车竞赛线上赛 本文章的目标: 比较全局路径规划算法中A*算法与Dijkstra算法在该地图场景下的规划与运行时间 比较局部路径规划算法中DWA算法与TEB算法在该地图场景下的规划与运行时间 在同等参数条件下选择出各自适合的算法进行融合,经过比较,我将选择dijkstra算法作为全局路径规划算法,TEB算法为局部路径规划算法 第一步,按照科大讯飞的教程配置文件 科大讯

weixin_42621524的博客 9366

spring boot2.0+中添加全局异常捕获

1、添加自定义异常,继承RuntimeException,为什么继承RuntimeException呢?是因为我们的事务在RuntimeException异常下会发生回滚。 1 public class BusinessException extends RuntimeException{ 2 3 public BusinessException(String code, S...

u013811335的专栏 62

C#实现不占用串口的串口监听与侦听技术:高效监控串口数据的最佳实践

本文详细介绍了如何实现不占用串口的串口监听与侦听技术,解决了传统串口监听可能带来的串口占用问题。通过使用虚拟串口、外部监听工具或第三方库,我们可以高效地实现串口数据的捕获与处理,适用于各种工业控制、物联网和嵌入式开发的应用场景。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1675

信捷XD/XL系列PLC与C#通信实战:Modbus-RTU协议详解(附完整代码)

本文详细介绍了信捷XD/XL系列PLC与C#通过Modbus-RTU协议实现高效通信的实战指南。从硬件连接到软件配置,再到核心通信功能的实现与优化,提供了完整的代码示例和工业级应用建议,帮助开发者快速构建稳定的自动化通信系统。

weixin_28292761的博客 511

shiro学习——整合jwt时全局异常处理器无法处理JWTFilter中抛出的异常

springboot2.0+shiro+jwt全局异常处理器无法处理JWTFilter中抛出的异常 一、shiro中会出现的异常 1、 AuthencationException 2、 AuthorizationException 二、为什么无法被全局异常处理器处理 三、解决方案 1、把统一返回的信息写入response中 2、使用重定向到处理该错误的controller中 一、shiro中会出现的异常 1、 AuthencationException AuthenticationEx

m0_67391521的博客 2272

SpringBoot文件上传实战:MultipartFile重复读取的3种方法(附避坑指南)

本文详细介绍了SpringBoot中处理MultipartFile重复读取的3种实用方法,包括字节数组缓存法、临时文件法和流重置法,并提供了避坑指南和性能优化技巧。特别适合需要多次读取上传文件内容的开发者,帮助解决InputStream流只能读取一次的问题。

weixin_28710999的博客 398

部署一个自己的Spring Ai 服务(deepseek/通义千问)

Spring Boot 无缝接入 DeepSeek 和通义千问请求日志记录及其ip黑白名单 SpringBoot版本 3.2.0 JDK 版本为17 redis 3.2.0 mybatis 3.0.3

qq_65403599的博客 1509

Vue3 - 完美解决 vite 打包后在本地浏览器直接打开运行,build 打包后双击 index.html 直接以 file 协议运行网站(资源、接口等正常访问,和部署到服务器运行效果一样)

vue3vite怎么支持file协议本地打开,vite打包文件如何支持files协议,支持双击即可打开网页,vue3vite打包后双击本地运行,vue3vite打包后怎么直接在浏览器双击打开访问,vite打包后显示空白,vite如何支持本地file协议打开,vue3vite打包后如何本地查看网站,vue3vite项目打包后本地启动白屏怎么办,vite打包后的代码如何在本地运行,vite+vue3打包在fIle本地index.html打开项目,打包后如何直接打开index.html文件,vue3

🏆 前端领域优质创作者 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Spring Boot3自定义异常及全局异常捕获

在业务代码中抛出对应业务自定义异常:有参构造传递错误枚举信息(状态码+错误内容),全局异常捕获并从自定义异常类拿到相关返回信息统一封装返回。像这样直接抛出即可t=N7T8新版idea(2023)创建spring boot3项目-优快云博客https://blog.csdn.net/qq_62262918/article/details/135785412?

蒾酒的博客 7851

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Spring Boot 统一处理全局异常

Spring Boot统一异常处理方案,本文详细介绍了@ControllerAdvice,ExceptionHandler,并进行了项目实战。

小小张自由—>张有博 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SpringBoot配置全局异常捕获

SpringBoot中自带的异常捕获机制返回的默认页面比较丑,对用户来说不够人性化。所以这篇文章来讲解SpringBoot钟自定义全局异常捕获。主要将三种异常捕获形式: 页面跳转形式 ajax形式 统一返回异常的形式 1.页面跳转形式 首先新建一个异常: package com.haozz.exceptiondemo.controller; import org.spring...

haozz的博客 2万+

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

全局异常处理前言一、全局异常处理方式一1.1 自定义全局异常类1.2 手动抛出异常1.3 测试打印二、全局异常处理方式二2.1 定义基础接口类2.2 定义枚举类2.3 自定义异常类2.4 自定义数据传输2.5 自定义全局异常处理2.6 测试代码总结 前言 在日常项目开发中,异常是常见的,但是如何更高效的处理好异常信息,让我们能快速定位到BUG,是很重要的,不仅能够提高我们的开发效率,还能让你代码看上去更舒服,SpringBoot的项目已经对有一定的异常处理了,但是对于我们开发者而言可能就不太合适了,因此我

日常分享工作中的一些技术干货。 7万+

Spring Boot 2.X - Spring Boot全局异常处理

Spring Boot 2.X - Spring Boot全局异常处理 本文简单介绍一下Spring Boot的全局异常处理 原有的异常处理 使用IDEA创建一个Spring Boot项目,先定义一个Controller用于测试: @RestController public class TestController { @GetMapping("/test") public...

XUDC的程序人生 3515

Spring Boot 异常处理:@ControllerAdvice 全局异常捕获

配合是构建健壮、可维护的 Spring Boot 应用的基石。它提供了一种声明式、集中化的方式来管理应用程序的异常,将错误处理逻辑从业务逻辑中彻底解耦。是一个全局的、增强型的@Component,用于实现全局异常处理。通过方法可以针对不同类型的异常定义精确的响应策略。继承可以方便地定制 Spring 框架自身抛出的异常响应。始终记录完整的异常堆栈),但对客户端只返回必要且安全的信息。为 API 定义统一、结构化的错误响应格式是提升客户端体验的最佳实践。使用@Order控制多个的优先级。

走向CTO的路上... 1117

Spring Boot2统一异常处理

Spring Boot 2.0 统一异常处理为什么要统一异常处理项目框架及异常类型项目代码pom依赖(只写出该模块涉及依赖)配置yml(properties基本一样)通用返回类统一异常处理类实现ErrorController接口 为什么要统一异常处理 项目开发形式为前后端分离,采用Restful接口形式开发,对异常的处理与页面业务数据统一以json形式返回,登录等接口由前端路由实现。 项目框架及异...

canfengli的博客 8920

spring boot整合logback实现日志记录以及全局异常捕获

程序日志的保存追踪以及异常捕获是开发人员在日常应用及编程开发中经常会遇到的。正好最近开发需要用到此功能,就记录了下来。 项目环境 - Spring Boot : 2.0.1.RELEASE - Maven : 3.6.1 - Java : 1.8 - Intellij IDEA : 2019.1.3 项目创建 开发环境为 Intellij IDEA,创建spring boot项目很简单,可参考 ...

qq_36928715的博客 2305
上一篇: Spring Boot2.0之整合JSP
下一篇: ubuntu更换国内源
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值