10.SpringBoot 统一处理功能
文章目录
- 1.拦截器
- 1.1在代码中的应用
- 1.1.1定义拦截器
- 1.1.2注册配置拦截器
- 1.2拦截器的作用
- 1.3拦截器的实现
- 2.统一数据返回格式
- 2.1 为什么需要统⼀数据返回格式?
- 2.2 统⼀数据返回格式的实现
- 3.统一异常处理
- 4.SpringBoot专业版创建项目无Java8版本怎么办?
大家好,我是晓星航。今天为大家带来的是 SpringBoot 统一处理功能 相关的讲解!😀
1.拦截器
拦截器(Interceptor)是一种特殊的组件,它可以在请求处理的过程中对请求和响应进行拦截和处理。拦截器可以在请求到达目标处理器之前、处理器处理请求之后以及视图渲染之前执行特定的操作。拦截器的主要目的是在不修改原有代码的情况下,实现对请求和响应的统一处理。
HandlerInterceptor,拦截器的实现分为以下两个步骤:
- 创建自定义拦截器,实现 HandlerInterceptor 接口的 preHandle(执行具体方法之前的预处理)方法。
- 将自定义拦截器加⼊ WebMvcConfigurer 的 addInterceptors 方法中。
比如我们去银行办理业务,在办理业务前后,就可以加一些拦截操作
办理业务之前,先取号,如果带身份证了就取号成功
业务办理结束,给业务办理人员的服务进行评价
这些就是"拦截器"做的工作
1.1在代码中的应用
拦截器的实现分两步:
1.定义一个拦截器
2.把拦截器注册到项目中
图书管理系统的拦截器:
接口定义:

方法调用:
运行后,登录验证拦截器加入后运行结果:
1.1.1定义拦截器

1.1.2注册配置拦截器


1.2拦截器的作用
- 权限控制:拦截器可以在请求到达处理器之前进行权限验证,从而实现对不同用户的访问控制。
- 日志记录:拦截器可以在请求处理过程中记录请求和响应的详细信息,便于后期分析和调试。
- 接口幂等性校验:拦截器可以在请求到达处理器之前进行幂等性校验,防止重复提交。
- 数据校验:拦截器可以在请求到达处理器之前对请求数据进行校验,确保数据的合法性。
- 缓存处理:拦截器可以在请求处理之后对响应数据进行缓存,提高系统性能。
1.3拦截器的实现
1.定义拦截器

2.注册配置拦截器

2.统一数据返回格式
2.1 为什么需要统⼀数据返回格式?
统⼀数据返回格式的优点有很多,⽐如以下⼏个:
-
⽅便前端程序员更好的接收和解析后端数据接口返回的数据。
-
降低前端程序员和后端程序员的沟通成本,按照某个格式实现就⾏了,因为所有接口都是这样返回的。
-
有利于项⽬统⼀数据的维护和修改。
-
有利于后端技术部⻔的统⼀规范的标准制定,不会出现稀奇古怪的返回内容
2.2 统⼀数据返回格式的实现
统⼀的数据返回格式可以使⽤ @ControllerAdvice + ResponseBodyAdvice 的⽅式实现,具体实现代码如下:
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyA
dvice;
import java.util.HashMap;
@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {/*** 内容是否需要重写(通过此⽅法可以选择性部分控制器和⽅法进⾏重写)* 返回 true 表示重写*/@Overridepublic boolean supports(MethodParameter returnType, Class converterTyp
e) {return true;}/*** ⽅法返回之前调⽤此⽅法*/@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType,
MediaType selectedContentType,Class selectedConverterType, ServerHttpR
equest request,ServerHttpResponse response) {// 构造统⼀返回对象HashMap<String, Object> result = new HashMap<>();result.put("state", 1);result.put("msg", "");result.put("data", body);return result;}
}


只有String返回值会出现问题,int Integer Info对象 Result 返回值均没有问题。


这里出现报错,主要是由于我们的body从String类型被getAdivce()方法转化为了Result类型,导致body在传参时与方法中的String s这个变量对应不上导致报错。
3.统一异常处理
统⼀异常处理使⽤的是 @ControllerAdvice + @ExceptionHandler 来实现的,@ControllerAdvice
示控制器通知类,@ExceptionHandler 是异常处理器,两个结合表示当出现异常的时候执⾏某个通知,
也就是执⾏某个⽅法事件,具体实现代码如下:
import java.util.HashMap;
@ControllerAdvice
public class ErrorAdive {@ExceptionHandler(Exception.class)@ResponseBodypublic Object handler(Exception e) {HashMap<String, Object> map = new HashMap<>();map.put("state", 0);map.put("data", null);map.put("msg", e.getMessage());return map;}
}
PS:⽅法名和返回值可以⾃定义,其中最重要的是 @ExceptionHandler(Exception.class) 注解。
以上⽅法表示,如果出现了异常就返回给前端⼀个 HashMap 的对象,其中包含的字段如代码中定义的那样。
我们可以针对不同的异常,返回不同的结果,⽐以下代码所示
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
@ControllerAdvice
@ResponseBody
public class ExceptionAdvice {@ExceptionHandler(Exception.class)public Object exceptionAdvice(Exception e) {HashMap<String, Object> result = new HashMap<>();result.put("success", -1);result.put("message", "总的异常信息:" + e.getMessage());result.put("data", null);return result;}@ExceptionHandler(NullPointerException.class)public Object nullPointerexceptionAdvice(NullPointerException e) {HashMap<String, Object> result = new HashMap<>();result.put("success", -1);result.put("message", "空指针异常:" + e.getMessage());result.put("data", null);return result;}
}
当有多个异常通知时,匹配顺序为当前类及其⼦类向上依次匹配,案例演示。
在 UserController 中设置⼀个空指针异常,实现代码如下:
@RestController
@RequestMapping("/u")
public class UserController {@RequestMapping("/index")public String index() {Object obj = null;int i = obj.hashCode();return "Hello,User Index.";}
}
以上程序的执⾏结果如下:

如果不加下面日志,那么在打印时,将不会由提示效果,异常输出信息就会不明显

4.SpringBoot专业版创建项目无Java8版本怎么办?
更改了url之后

此时Java版本就有8了

此时SpringBoot也有2.x的版本了

需要确认的位置1:在设置里面搜索,看是否是jdk-1.8版本

需要确认的位置2:

需要确认位置3:

如果使用jdk-1.8,环境变量就改为jdk-1.8.0_192。
如果使用jdk-7,环境变量就改为jdk-17.0.10
感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘
相关文章:
10.SpringBoot 统一处理功能
文章目录 1.拦截器1.1在代码中的应用1.1.1定义拦截器1.1.2注册配置拦截器 1.2拦截器的作用1.3拦截器的实现 2.统一数据返回格式2.1 为什么需要统⼀数据返回格式?2.2 统⼀数据返回格式的实现 3.统一异常处理4.SpringBoot专业版创建项目无Java8版本怎么办?…...
【八股系列】为什么会有webpack配置?webpack的构建流程是什么?
文章目录 1. webpack是什么?2. 为什么需要webpack?3. webpack构建原理4. 构建流程通常包括以下步骤5. Webpack构建流程图 1. webpack是什么? Webpack是一个模块打包工具,它可以将项目中的各种静态资源,如JavaScript、…...
sdf 测试-2-openssl
任务详情 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,参考网内容 和AI要给出详细过程,否则不得分。 0. 根据gmt0018标准,如何调用接口实现基于SM3求你的学号姓名的SM3值?(5‘) 使用OpenSSL实现SDF接…...
头歌springboot初体验
您好!看起来您可能在询问关于Spring Boot的入门体验。Spring Boot是一个开源的Java框架,它设计用来简化Spring应用程序的初始搭建和开发过程。以下是一些Spring Boot的基本概念和入门步骤: Spring Boot简介: Spring Boot是Spring框…...
矩阵对角化在机器学习中的奥秘与应用
在机器学习的广阔领域中,矩阵对角化作为一种重要的数学工具,扮演着不可或缺的角色。从基础的线性代数理论到复杂的机器学习算法,矩阵对角化都在其中发挥着重要的作用。 矩阵对角化的概念与原理 矩阵对角化是矩阵理论中的一个基本概念&#x…...
操作MySQL数据库
【一】针对库的增删查改(文件夹) 【1】创建数据库 (1)语法 创建一个存储数据表的文件夹。 注意:mysql中的编码字符集中utf-8,要换成utf8mb4。SQL语句中的中括号部分表示可选。 create database [if no…...
Linux shell 文件生成文件脚本(模拟生成文件、生成大量文件)
文章目录 Linux shell 文件生成文件脚本 Linux shell 文件生成文件脚本 TARGET_DIR:生成文件路径 NUM_FILES:生成文件数量 FILE_SIZE:生成文件大小(KB) #!/bin/bashset -e set -u# Directory where files will be cr…...
theharvester一键收集域名信息(KALI工具系列十)
目录 1、KALI LINUX简介 2、theharvester工具简介 3、在KALI中使用theharvester 3.1 用搜索引擎扫描 3.2 扫描并输出结果 3.3 扫描某域名下的所有账号 3.4 使用所有的搜索引擎扫描 4、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版&…...
「动态规划」删除并获得点数
力扣原题链接,点击跳转。 给你一个整数数组nums。每次操作,可以删除任意一个值n,接着获得点数n,并同时删除所有的n-1和n1。你最多能获取多少点数? 这个问题的解法相当巧妙。我们可以把问题先转化一下。用类似计数排序…...
MongoDB CRUD操作:内嵌文档数组查询
MongoDB 内嵌文档数组查询 文章目录 MongoDB 内嵌文档数组查询查询数组内嵌文档为文档数组中的字段指定查询条件指定文档数组内嵌文档字段的查询条件使用数组索引查询内嵌文档的字段 为文档数组指定多个条件单个内嵌文档满足内嵌字段的多个查询条件符合标准的元素组合 使用 Mon…...
【C++】每日一题 50 Pow(x,n)
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,x^n )。 当需要计算x的n次幂时,可以使用递归或者迭代的方式来实现。 #include <iostream>double myPow(double x, int n) {if (n 0) {return 1.0;} else if (…...
HG/T 6088-2022 透水道路用涂料检测
透水混凝土是指由水泥、矿物掺合料、骨料、外加剂及水等主要材料经拌合形成的,具有透水功能的混凝土材料,用于其表面的涂料称为透水道路用涂料。 HG/T 6088-2022透水道路用涂料检测项目: 测试指标 测试方法 有害物质限量 GB 38468 在容器…...
linux定时清理docker日志脚本
Linux 定时清理 Docker 日志的脚本与配置指南 在使用 Docker 容器化应用程序时,日志文件可能会迅速增长,占用大量磁盘空间。为了保持系统的稳定性和高效运行,定期清理 Docker 日志文件是必要的。本文将介绍如何编写一个 Linux 脚本来清理 Docker 日志文件,并通过 cron 定时…...
ROS学习笔记(16):夹缝循迹
0.前言 在笔记的第15期对巡墙驾驶的原理进行了简单讲解,而这期我们来讲一下夹缝循迹,也常被叫follow the gap,也更新一些概念。 1.探索式路径规划与避障 1.概念 无预先建图的路径规划叫探索式路径规划,例如巡墙循迹和夹缝循迹&…...
【MySQL精通之路】SQL语句(3)-锁和事务语句
目录 1.START TRANSACTION、COMMIT和ROLLBACK语句 2.无法回滚的语句 3.导致隐含COMMIT的语句 4.SAVEPOINT、ROLLBACK TO SAVEPOINT和RELEASE SAVEPOINT语句 5.LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE语句 6.LOCK TABLE和UNLOCK TABLES语句 6.1 表锁获取 6.2 表锁释放…...
211大学计算机专业不考408,新增的交叉专业却考408!南京农业大学计算机考研考情分析!
南京农业大学信息科技学院可追溯至1981年成立的计算中心和1985年筹建的农业图书情报专业。1987年设立了农业图书情报系,1993 年农业图书情报系更名为信息管理系,本科专业名称也于1999年更名为信息管理与信息系统专业。1994年计算中心开始招收计算机应用专…...
利用java8 的 CompletableFuture 优化 Flink 程序,性能提升 50%
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
香橙派 AIpro综合体验及AI样例运行
香橙派 AIpro综合体验及AI样例运行 环境: 香橙派版本: AIpro(8TOPSINT8) OS : Ubuntu 22.04.3 LTS(GNU/Linux 5.10.0 aarch64) (2024-03-18) 远程服务端1:OpenSSH 8.9p1 远程服务端2:TightVNC Server 1.3.10 远程客户端…...
通过域名接口申请免费的ssl多域名证书
来此加密已顺利接入阿里云的域名接口,用户只需一键调用,便可轻松完成域名验证,从而更高效地申请证书。接下来,让我们详细解读一下整个操作过程。 来此加密官网 免费申请SSL证书 免费SSL多域名证书,泛域名证书。 首先&a…...
【JAVA WEB实用与优化技巧】如何自己封装一个自定义UI的Swagger组件,包含Swagger如何处理JWT无状态鉴权自动TOKEN获取
目录 一、Swagger 简介1. 什么是 Swagger?2. 如何使用 Swagger3. Springboot 中swagger的使用示例1. maven 引入安装2. java配置 二、Swagger UI存在的缺点1.不够方便直观2.请求的参数没有缓存3.不够美观4.如果是JWT 无状态登录,Swagger使用起来就没有那…...
AI赋能开发:让快马平台智能优化与扩展你的openclaw101.dev工具库
AI赋能开发:让快马平台智能优化与扩展你的openclaw101.dev工具库 最近在维护openclaw101.dev项目时,我发现工具函数库需要一次全面的优化升级。传统手动修改不仅耗时,还容易遗漏潜在优化点。这次尝试用InsCode(快马)平台的AI辅助开发功能&am…...
Qwen3-ASR实战:5步搭建你的多语言语音转文字服务
Qwen3-ASR实战:5步搭建你的多语言语音转文字服务 1. 为什么选择Qwen3-ASR 语音识别技术正在重塑我们与数字世界的交互方式,而Qwen3-ASR-1.7B的出现为开发者带来了全新的可能性。这个模型最引人注目的特点是其卓越的多语言处理能力——支持30多种国际语…...
LaTeX公式插件:在PowerPoint中高效插入数学公式的终极指南
LaTeX公式插件:在PowerPoint中高效插入数学公式的终极指南 【免费下载链接】latex-ppt Use LaTeX in PowerPoint 项目地址: https://gitcode.com/gh_mirrors/la/latex-ppt 想在PowerPoint中轻松创建专业数学公式吗?latex-ppt插件让你直接在PPT中使…...
避坑指南:在Windows/Linux上部署YOLOv8+PaddleOCR车牌识别项目的完整流程
避坑指南:在Windows/Linux上部署YOLOv8PaddleOCR车牌识别项目的完整流程 车牌识别系统作为智能交通的核心组件,正从专业领域向开发者社区渗透。许多技术团队在尝试复现YOLOv8PaddleOCR方案时,往往卡在环境配置、依赖冲突等基础环节。本文将手…...
OmenSuperHub:惠普游戏本性能管理新范式
OmenSuperHub:惠普游戏本性能管理新范式 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 一、性能管理的痛点与破局之道 当你在《艾尔登法环》…...
SpleeterGui终极指南:3步完成AI音乐分离的免费神器
SpleeterGui终极指南:3步完成AI音乐分离的免费神器 【免费下载链接】SpleeterGui Windows desktop front end for Spleeter - AI source separation 项目地址: https://gitcode.com/gh_mirrors/sp/SpleeterGui 想要从喜爱的歌曲中提取纯净人声制作翻唱&#…...
Poppins字体革新:跨语言排版的高效解决方案
Poppins字体革新:跨语言排版的高效解决方案 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins 在全球化协作日益频繁的今天,开发者和设计师正面临着多语言排…...
网站标题优化对SEO排名的影响是什么
网站标题优化对SEO排名的影响是什么 在当今的互联网时代,网站的排名直接影响到其流量和转化率。搜索引擎优化(SEO)是提升网站排名的关键手段之一,而网站标题优化在整个SEO策略中占据重要地位。网站标题优化对SEO排名的影响究竟有…...
从零到一:手把手搭建Frida动态分析环境
1. 为什么你需要Frida动态分析环境 第一次听说Frida时,我也觉得这玩意儿太专业了,肯定很难搞。但真正用起来才发现,它就像给手机应用装了个"X光机",能实时查看应用内部的运行状态。举个例子,去年我分析某款…...
