【JavaEE spring】SpringBoot 统一功能处理
SpringBoot 统一功能处理
- 1. 拦截器
- 1.1 拦截器快速⼊⻔
- 1.2 拦截器详解
- 1.2.1 拦截路径
- 1.2.2 拦截器执⾏流程
- 1.3 登录校验
- 1.3.1 定义拦截器
- 1.3.2 注册配置拦截器
- 2. 统⼀数据返回格式
- 2.1 快速⼊⻔
- 2.2 存在问题
- 2.3 案例代码修改
- 2.4 优点
- 3. 统⼀异常处理
1. 拦截器
后端程序根据Session来判断⽤⼾是否登录, 但是实现⽅法是⽐较⿇烦的
- 需要修改每个接⼝的处理逻辑
- 需要修改每个接⼝的返回结果
- 接⼝定义修改, 前端代码也需要跟着修改
1.1 拦截器快速⼊⻔
什么是拦截器?
拦截器是Spring框架提供的核⼼功能之⼀, 主要⽤来拦截⽤⼾的请求, 在指定⽅法前后, 根据业务需要执⾏预先设定的代码.

下⾯我们先来学习下拦截器的基本使⽤.
拦截器的使⽤步骤分为两步:
- 定义拦截器器
- 注册配置拦截器
⾃定义拦截器:实现HandlerInterceptor接⼝,并重写其所有⽅法
@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {log.info("执行登录拦截器...");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {log.info("目标方法执行后, 反馈执行");}}
- preHandle()⽅法:⽬标⽅法执⾏前执⾏. 返回true: 继续执⾏后续操作; 返回false: 中断后续操作.
- postHandle()⽅法:⽬标⽅法执⾏后执⾏
注册配置拦截器:实现WebMvcConfigurer接⼝,并重写addInterceptors⽅法
@Configuration
public class WebConfig implements WebMvcConfigurer {// 自定义拦截器对象@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor) // 注册自定义拦截器对象.addPathPatterns("/**"); // 设置拦截器请求的路径}
}
启动服务, 试试访问任意请求, 观察后端⽇志

我们把拦截器中preHandle⽅法的返回值改为false, 再观察运⾏结果
可以看到, 拦截器拦截了请求, 没有进⾏响应
1.2 拦截器详解
拦截器的⼊⻔程序完成之后,接下来我们来介绍拦截器的使⽤细节。拦截器的使⽤细节我们主要介绍两个部分:
- 拦截器的拦截路径配置
- 拦截器实现原理
1.2.1 拦截路径
拦截路径是指我们定义的这个拦截器, 对哪些请求⽣效.
我们在注册配置拦截器的时候, 通过 addPathPatterns() ⽅法指定要拦截哪些请求. 也可以通过excludePathPatterns()指定不拦截哪些请求.
上述代码中, 我们配置的是 /** , 表⽰拦截所有的请求.
⽐如⽤⼾登录校验, 我们希望可以对除了登录之外所有的路径⽣效.

在拦截器中除了可以设置 /** 拦截所有资源外,还有⼀些常⻅拦截路径设置:

以上拦截规则可以拦截此项⽬中的使⽤ URL,包括静态⽂件(图⽚⽂件, JS 和 CSS 等⽂件).
1.2.2 拦截器执⾏流程

- 添加拦截器后, 执⾏Controller的⽅法之前, 请求会先被拦截器拦截住. 执⾏
preHandle()⽅法,这个⽅法需要返回⼀个布尔类型的值. 如果返回true, 就表⽰放⾏本次操作, 继续访问controller中的⽅法. 如果返回false,则不会放⾏(controller中的⽅法也不会执⾏). - controller当中的⽅法执⾏完毕后,再回过来执⾏
postHandle()这个⽅法以及afterCompletion()⽅法,执⾏完毕之后,最终给浏览器响应数据.
1.3 登录校验
通过拦截器来完成图书管理系统中的登录校验功能
1.3.1 定义拦截器


1.3.2 注册配置拦截器

2. 统⼀数据返回格式
2.1 快速⼊⻔
统⼀的数据返回格式使⽤ @ControllerAdvice 和 ResponseBodyAdvice 的⽅式实现
- @ControllerAdvice 表⽰控制器通知类
- 添加类 ResponseAdvice , 实现 ResponseBodyAdvice 接⼝, 并在类上添加@ControllerAdvice 注解
@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {return ResponseData.success(body);}
}
-
supports⽅法: 判断是否要执⾏beforeBodyWrite⽅法. true为执⾏, false不执⾏. 通过该⽅法可以选择哪些类或哪些⽅法的response要进⾏处理, 其他的不进⾏处理.
从returnType获取类名和⽅法名

-
beforeBodyWrite⽅法: 对response⽅法进⾏具体操作处理
2.2 存在问题
- 返回 String 结果会报错

- 解决方法: 判断 返回的结果是否为String, 如果是, 则使用 json 序列化

2.3 案例代码修改
- 如果⼀些⽅法返回的结果已经是Result类型了, 那就直接返回Result类型的结果即可
2.4 优点
- ⽅便前端程序员更好的接收和解析后端数据接⼝返回的数据
- 降低前端程序员和后端程序员的沟通成本, 按照某个格式实现就可以了, 因为所有接⼝都是这样返回的.
- 有利于项⽬统⼀数据的维护和修改.
- 有利于后端技术部⻔的统⼀规范的标准制定, 不会出现稀奇古怪的返回内容.
3. 统⼀异常处理
统⼀异常处理使⽤的是 @ControllerAdvice + @ExceptionHandler 来实现的,@ControllerAdvice 表⽰控制器通知类, @ExceptionHandler 是异常处理器,两个结合表⽰当出现异常的时候执⾏某个通知,也就是执⾏某个⽅法事件

相关文章:
【JavaEE spring】SpringBoot 统一功能处理
SpringBoot 统一功能处理 1. 拦截器1.1 拦截器快速⼊⻔1.2 拦截器详解1.2.1 拦截路径1.2.2 拦截器执⾏流程 1.3 登录校验1.3.1 定义拦截器1.3.2 注册配置拦截器 2. 统⼀数据返回格式2.1 快速⼊⻔2.2 存在问题2.3 案例代码修改2.4 优点 3. 统⼀异常处理 1. 拦截器 后端程序根据…...
小猪o2o生活通系统更新到了v24.1版本了php文件开源了提供VUE了但是车牌识别功能你真得会用吗
一.车牌识别设置项 车牌识别设置项总开关:系统后台-社区管理-社区配置-车牌识别配置。 平台需要开启车牌识别功能,其次平台可以选择车牌识别功能是由平台配置还是小区自己配置有需要提供代码的可以Q我昵称注明:CSDN网友。如果是平台自己配置&…...
Servlet+Ajax实现对数据的列表展示(极简入门)
目录 1.准备工作 1.数据库源(这里以Mysql为例) 2.映射实体类 3.模拟三层架构(Dao、Service、Controller) Dao接口 Dao实现 Service实现(这里省略Service接口) Controller层(或叫Servlet层…...
汽车租赁系统
目录 一.研究背景 二.系统架构 1、SSM 2、JAVA 3、MySQL 4、系统架构 三.系统功能 1、车辆管理 2、客户管理 3、销售管理 4、统计分析 四.系统实现 五.结论总结 一.研究背景 传统的销售与信息统计管理都主要依靠人工,处理出的销售数据量与使用管理系统…...
随笔:回家过年
每一年的年底,伴随着气温的降低,大家开始逐渐增加了返乡的热情。风雪、堵车阻挡不住从各大一线城市归家的思绪。 这种年底大迁徙是中国人对家的执着。有钱没钱回家过年。随着年龄的增加,回家其实是只是做回孩子。脱下了城市里的正装ÿ…...
代理模式(静态代理、JDK 动态代理、CGLIB 动态代理)
代理模式(静态代理、JDK 动态代理、CGLIB 动态代理) 一、代理模式概述1. 生活中的代理案例2. 为什么要使用代理3. 代理模式在 Java 中的应用4. 概述5. 生活中代理图示二、代理的实现方式1. Java 中代理图示2. 静态代理2.1 案例2.2 实现案例2.3 静态代理存在的问题三、动态代理…...
【nginx实战】通过nginx实现http 长连接(即keep alive)
文章目录 一. http的长连接历史1. HTTP短连接模型2. HTTP长连接模型 二. nginx作为代理时实现HTTP长连接1. nginx与client的长连接1.1. keepalive_timeout指令1.2. keepalive_requests指令* 场景分析 2. 保持和server的长连接2.1. location设置* 场景分析 2.2. upstream设置* 场…...
通用函数
目录 处理null 多数值判断 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 Oracle 提供了两个简单的数据处理函数: nvl()、decode()。在版本升级的过程中,这两个函数又衍生出了许多子函数 处理null 下面首先…...
Linux 查看系统信息 + 服务信息命令(简记)
概述 作用:Linux 运维工作中常用的命令速查 小步教程 (xiaobuteach.com) Linux 命令大全 | 菜鸟教程 (runoob.com) 文本编辑器vim 本章大纲 | 小步教程 vim 多文件编辑 | 小步教程 常用 ps 查看服务启动命令 Linux ps 命令 | 菜鸟教程 (runoob.com) # 查找…...
有了Future为什么还要CompletableFuture?
文章目录 Future 接口理论知识复习Future 接口概述场景描述小结 Future 接口常用实现类 FutureTask 异步任务Future 的作用Futrue 编码测试优缺点分析优点缺点小结 面对一些复杂的任务对于简单的业务场景使用 Future 接口完全 OK回调通知创建异步任务多个任务前后依赖可以组合对…...
Android super.img解包和打包指南(含工具下载lpunpack、lpmake、lpdump)
本文所有命令均需要在linux 上执行 一、解包 1、将Android sparse image格式的super.img转成二进制文件 $ sudo apt install android-sdk-libsparse-utils $ simg2img super.img super.img.bin 2、下载工具lpunpack 和lpmake、lpdump 以及其依赖库 下载地址:https://downl…...
端到端实现高精地图重建(TopoNet解读和横评)
论文出处 [2304.05277] Graph-based Topology Reasoning for Driving Scenes (arxiv.org)https://arxiv.org/abs/2304.05277 TopoNet TopoNet的目标是从车辆上安装的多视角摄像头获取图像,感知实体并推理出驾驶场景的拓扑关系,实现端到端预测…...
系统架构20 - 统一建模语言UML(上)
统一建模语言 组成要素事物关系 在目前的软件开发方法中,面向对象的方法占据着主导地位。面向对象方法的主导地位也决定着软件开发过程模型化技术的发展,面向对象的建模技术方法也就成为主导的方法。 公认的面向对象建模语言出现于20世纪70年代中期。从1…...
数据库学习笔记2024/2/4
随笔 1. 为什么学? 认识数据,熟悉数据,掌握数据。 进企业必备技能。 2. 怎么学? 1、MySQL数据库就是存储和管理数据的一个大型软件,这个软件有一个专门的语言叫SQL,主要学的是SQL语言,但想要达到企业用人标准,就还得学会熟练使用MySQL这个软件。 2、学习分三阶段: 一. …...
Apache POI 处理excel文件 记录用法
Apache POI 写excel public static void write() throws IOException {//再内存中创建了一个Excel文件XSSFWorkbook excel new XSSFWorkbook();//创建一个sheet页XSSFSheet sheet excel.createSheet("info");//这里创建行对象,这里的rownum 是从0开始的,类似于数…...
Transformer实战-系列教程2:Transformer算法解读2
🚩🚩🚩Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 Transformer实战-系列教程1:Transformer算法解读1 Transformer实战-系列教程2:Transformer算法解读2 5、Multi-head机制 在4中我们的输入是X&#x…...
python_蓝桥杯刷题记录_笔记_全AC代码_入门3
前言 记录我的解法以及笔记思路,谢谢观看。 题单目录 1.P2141 [NOIP2014 普及组] 珠心算测验 2.P1567 统计天数 3.P1055 [NOIP2008 普及组] ISBN 号码 4.P1200 [USACO1.1] 你的飞碟在这儿 Your Ride Is Here 5.P1308 [NOIP2011 普及组] 统计单词数 6.P1047 […...
STM32 IIC电量计LTC2944
1 描述 LTC2944 可在便携式产品应用中测量电池充电状态、电池电压、电池电流及其自身温度。宽输入电压范围允许使用高达 60V 的多节电池。精密库仑反向积分电流通过电池正极端子与负载或充电器之间的检测电阻器。 电压、电流和温度由内部 14 位无延迟 ΔΣ™ ADC 测量。测量结…...
Linux 链接 GitHub 出现 Connection timed out
问题 安装GIT并完成公钥验证:Linux 系统拉取 Github项目 [rootxxx devtools]# ssh -T gitgithub.com ssh: connect to host github.com port 22: Connection timed out解决方案 进入在存放公钥私钥id_rsa.pub文件里,新建/修改config文本 [rootxxx my…...
vulnhub靶场之Thales
一.环境搭建 1.靶场描述 Description : Open your eyes and change your perspective includes 2 flags:user.txt and root.txt. Telegram: machineboy141 (for any hint) This works better with VIrtualBox rathe than VMware 2.靶场地址 https://www.vulnhub.com/entry/t…...
3大场景攻克显卡驱动残留:DDU深度清理技术全指南
3大场景攻克显卡驱动残留:DDU深度清理技术全指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstaller …...
SmolVLA高性能部署:PyTorch 2.7.1 + Gradio 6.4.0协同优化方案
SmolVLA高性能部署:PyTorch 2.7.1 Gradio 6.4.0协同优化方案 1. 项目概述与核心价值 SmolVLA是一个专为经济实惠机器人技术设计的紧凑高效视觉-语言-动作模型。这个仅有5亿参数的轻量级模型,能够在保持高性能的同时大幅降低硬件门槛,让更多…...
手把手教你用DeepSeek-OCR-2:上传PDF秒变可编辑文档
手把手教你用DeepSeek-OCR-2:上传PDF秒变可编辑文档 1. 为什么选择DeepSeek-OCR-2处理文档 在日常工作中,我们经常需要处理各种PDF文档——合同、发票、报告、论文...传统OCR工具虽然能提取文字,但遇到复杂版式就束手无策:表格变…...
StructBERT情感分类模型在职场评论分析中的应用
StructBERT情感分类模型在职场评论分析中的应用 1. 引言 "公司食堂的饭菜越来越差了,每天排队还要半小时","这次晋升机制很公平,大家都有机会","团队氛围很好,但加班实在太多了"...这…...
Qwen3-32B环境配置详解:小白也能看懂的安装与调用教程
Qwen3-32B环境配置详解:小白也能看懂的安装与调用教程 1. 为什么选择Qwen3-32B? 在众多大语言模型中,Qwen3-32B以其出色的性价比脱颖而出。这个拥有320亿参数的模型,在推理能力、代码生成和逻辑分析方面表现优异,特别…...
从高斯光到无衍射光束:基于ZEMAX与Thorlabs锥透镜的贝塞尔光场构建
1. 从高斯光到贝塞尔光束:光学设计的奇妙旅程 第一次听说贝塞尔光束时,我完全被它的无衍射特性震惊了。想象一下,一束光在传播过程中几乎不会扩散,就像科幻电影里的激光武器一样。这种神奇的光束在医疗、精密加工和光学捕获等领域…...
手把手教你用Python复刻‘双紫擒龙’量化指标(附完整源码与回测)
手把手教你用Python复刻‘双紫擒龙’量化指标(附完整源码与回测) 在量化交易领域,技术指标的神秘面纱常常让初学者望而却步。今天,我们将用Python彻底拆解这个名为"双紫擒龙"的指标,从数据获取到可视化回测&…...
Apache SeaTunnel 2.3.12 深度解析:Zeta 引擎优化与 SQL Transform 新特性实战
1. Zeta 引擎核心优化解析 这次 2.3.12 版本对 Zeta 引擎的改进可谓刀刀到肉,我实测下来最明显的提升就是 Checkpoint 监控现在可以精确到每个算子级别了。以前排查作业卡顿时经常要像无头苍蝇一样到处翻日志,现在通过 REST API 就能直接看到哪个算子拖慢…...
Mujoco入门指南:从安装到基础控制
1. Mujoco简介与安装准备 Mujoco(Multi-Joint dynamics with Contact)是一款专注于机器人动力学仿真的物理引擎。我第一次接触Mujoco时就被它的轻量化震惊了——Windows安装包只有5.7MB,相比其他动辄上GB的仿真软件简直是轻量级选手。它特别适…...
程序员必备:10个免费IT电子书网站实测推荐(附优缺点对比)
程序员必备:10个免费IT电子书资源站深度评测与实战指南 在技术迭代飞快的时代,持续学习是程序员保持竞争力的核心。优质电子书资源站如同数字时代的图书馆,但面对海量选择,如何高效筛选真正实用的平台?本文基于三个月实…...
