【springboot】全局异常处理
转自:
https://blog.csdn.net/cp026la/article/details/86495196
前言:
开发中异常的处理必不可少,常用的就是 throw 和 try catch,这样一个项目到最后会出现很多冗余的代码,使用全局异常处理避免过多冗余代码。
全局异常处理:
1、pom 依赖(延续上一章代码):
<dependencies>
<!-- Spring Boot Web 依赖 -->
<!-- Web 依赖 - 包含了 spring-boot-starter-validation 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Test 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- spring-boot整合mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
<!-- fastjson 依赖添加 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
</dependencies>
2、公共的结果类封装:
这里简单封装,实际根据自己业务需求去封装。
@Getter
@Setter
public class ApiResult {
// 响应业务状态
private Integer status;
// 响应消息
private String msg;
// 响应中的数据
private Object data;
public static ApiResult build(Integer status, String msg, Object data) {
return new ApiResult(status, msg, data);
}
public static ApiResult ok(Object data) {
return new ApiResult(data);
}
public static ApiResult ok() {
return new ApiResult(null);
}
public ApiResult() { }
public static ApiResult build(Integer status, String msg) {
return new ApiResult(status, msg, null);
}
public ApiResult(Integer status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
public ApiResult(Object data) {
this.status = 200;
this.msg = "OK";
this.data = data;
}
}
3、添加全局异常处理类(在入口函数下的包中新建):
/**
* 全局异常处理 Handler
* @ControllerAdvice 配置控制器通知
* annotations 属性: 指定我们需要拦截的注解,一个或多个(多个加到大括号中,逗号分隔)
*/
// @RestControllerAdvice = @ResponseBody + @ControllerAdvice
@RestControllerAdvice(annotations = {RestController.class})
@Slf4j
public class GlobalExceptionHandler {
/**
* 默认统一异常处理方法
* @ExceptionHandler 注解用来配置需要拦截的异常类型, 也可以是自定义异常
*/
@ExceptionHandler(Exception.class)
// 此处可以指定返回的状态码 和 返回 结果说明
// @ResponseStatus(reason = "exception",value = HttpStatus.BAD_REQUEST)
public Object runtimeExceptionHandler(Exception e) {
// 打印异常信息到控制台
e.printStackTrace();
log.error("请求出现异常,异常信息为: {}", e.getMessage());
// 使用公共的结果类封装返回结果, 这里我指定状态码为 400
return ApiResult.build(400, e.getMessage());
}
}
4、异常测试类:
/**
* 异常处理测试 controller
*/
@RestController
@Slf4j
public class ExceptionController {
@RequestMapping(value = "/exception/{number}")
public ApiResult exception(@PathVariable int number) {
int res = 10 / number;
log.info(">>>>>结果number为: {}", res);
return ApiResult.ok();
}
}
5、测试:
5.1、请求接口:http://localhost:8080/exception/1 结果正常
5.2、请求接口:http://localhost:8080/exception/0 出现除以 0 错误,全局异常处理起作用,返回指定结果集。
【springboot】全局异常处理的更多相关文章
- springboot 全局异常处理
springboot 全局异常处理 研究了半天springboot的全局异常处理,虽然还是需要再多整理一下,但是对于常见的404和500足以可以区分开,能够根据这两个异常分别处理 首先配置视图解析路径 ...
- 【第二十三章】 springboot + 全局异常处理
一.单个controller范围的异常处理 package com.xxx.secondboot.web; import org.springframework.web.bind.annotation ...
- 第二十三章 springboot + 全局异常处理
一.单个controller范围的异常处理 package com.xxx.secondboot.web; import org.springframework.web.bind.annotation ...
- SpringBoot全局异常处理方式
每个项目全局异常处理非常重要, 今天在处理项目架构的时候添加了一个全局异常处理. 大概三种异常情况: 一:在进入Controller之前,譬如请求一个不存在的地址,404错误. 二:在执行@Reque ...
- SpringBoot全局异常处理与定制404页面
一.错误处理原理分析 使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者器发生异常(http状态码一般为500)时,SpringBoot就会给我们返回错 ...
- SpringBoot 全局异常处理 @RestControllerAdvice +@ExceptionHandler 请求参数校验
ControllerAdvice 指示带注释的类辅助“控制器”. 作为的特殊化@Component,允许通过类路径扫描自动检测实现类. 通常用于定义@ExceptionHandler, @InitBi ...
- springboot全局异常处理(1)
新建一个类 在类上加一个注解即可 @ControllerAdvice /** * 全局错误处理 * @author sys * */ @ControllerAdvice @ResponseBody p ...
- springboot全局异常处理
@Slf4j@ControllerAdvicepublic class RestExceptionHandler extends ResponseEntityExceptionHandler { @E ...
- SpringBoot微服务电商项目开发实战 --- 全局异常处理
上一篇文章讲了Redis缓存的安全防范及Kafka的接入及消息实现,今天接着前面的内容基础说说项目的优化和基础配置,今天要讲的内容主要是Spring Boot项目中的全局异常处理.为什么要做这件事呢? ...
- SpringBoot整合全局异常处理&SpringBoot整合定时任务Task&SpringBoot整合异步任务
============整合全局异常=========== 1.整合web访问的全局异常 如果不做全局异常处理直接访问如果报错,页面会报错500错误,对于界面的显示非常不友好,因此需要做处理. 全局异 ...
随机推荐
- DNS服务器安全---通过ipset对DNS异常解析流量的源IP地址进行管控
ipset介绍 ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则.而不像普通的iptables链只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以 ...
- NumPy之:多维数组中的线性代数
目录 简介 图形加载和说明 图形的灰度 灰度图像的压缩 原始图像的压缩 总结 简介 本文将会以图表的形式为大家讲解怎么在NumPy中进行多维数据的线性代数运算. 多维数据的线性代数通常被用在图像处理的 ...
- Python自动化测试面试题-Selenium篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- 爬取房价信息并制作成柱状图XPath,pyecharts
以长沙楼盘为例,看一下它的房价情况如何url = https://cs.newhouse.fang.com/house/s/b91/ 一.页面 二.分析页面源代码 我们要获得的数据就是名字和价格,先来 ...
- redis的单线程
一.redis为什么这么快 1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速.数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1):2.数据结构简单 ...
- spring第三章
第三章 实现AOP AOP:面向方面编程,AOP能够使您将所有模块共有的特性与应用程序的主要业务逻辑隔离开 一.AOP介绍 横切关注点:在Web应用程序中,有一些服务(如登录.安全和事务管理)不是应用 ...
- django中路由配置的正则
在django中配置路由遇到正则的坑: django2.x版本中使用re_path来进行正则表达式的匹配 用法如下: from Django.urls import re.path(导入re_path ...
- win10家庭版无法访问samba
1:本教程只针对win10家庭版用户,右键点击电脑选择属性就能看到自己的版本.(因为win10家庭版没有本地策略组) 2:针对一下连接不上的情况 3:连接不上的情况 ① : ...
- SSRF漏洞入门篇
SSRF漏洞,又名服务端请求伪造漏洞. PHP中下列函数使用不当会导致SSRF: file_get_contents().fsockopen().curl_exec()函数(源码审计的时候注意点儿): ...
- Gogs+Drone搭建CI/CD平台
Gogs 是由 Go 语言编写的 Git 服务器,由中国人主导开发的一款开源项目,搭建方便并且拥有完善的中文文档,配合 Drone 可以实现持续集成/持续部署.本文介绍如何通过 Docker 搭建 G ...