SpringBoot统一功能处理

(一).拦截器

1.概念

拦截器是Spring框架提供的核心功能之一,主要用来拦截用户的请求,在指定方法前后,根据业务需要执行预先设定的代码

2.详解

(1).拦截路径

拦截路径指的是我们定义的这个拦截器要对哪些请求生效。

|------------|--------------|--------------------------------------------------------|
| 拦截路径 | 含义 | 举例 |
| /* | 一级路径 | 能匹配/user,/book,/login,不能匹配/user/login |
| /** | 任意级路径 | 能匹配/user,/user/login,/user/reg |
| /book/* | /book下的一级目录 | 能匹配/book/addBook,不能匹配/book/addBook/1,/book |
| /book/** | /book下的任意级路径 | 能匹配/book,/book/addBook,/book/addBook/2,不能匹配/user/login |

(2).拦截器执行步骤

当添加了拦截器之后,在执行Controller的方法之前,请求会先被拦截器截住。

3.使用

下面,在我写的一个图书管理系统中来掩饰一下拦截器的使用

上图是我的登录页

这是我的图书列表页。

如果说,现在没有用户登录,那么是看不了图书列表页的,只有当用户登录了,才能看到图书列表页。此时,就可以使用拦截器来解决这个问题

要使用拦截器,分为两个步骤,(1).自定义拦截器 (2).注册配置拦截器

(1).自定义拦截器

(2).注册配置拦截器

此时,再看拦截器的代码

当登录之后,此时拦截器返回true,此时是可以看到他图书列表页的

但是,当未登录的时候

通过前端,强制跳转回登录页

有兴趣的可以看一下Spring的源码,这里就不多介绍了

4.介绍"适配器模式"

(1).概念

适配器模式,也叫包装器模式。他是将一个类的接口,转换成客户期望的另一个接口,适配器让原本不兼容的类可以合作无间。简单的来说,就是目标类不能直接使用,此时可以通过一个新类进行包装,适配调用方进行使用,把两个不兼容的接口通过一定的方式使之兼容。

这里,介绍适配器模式的原因是因为,在Spring原码中使用了适配器模式。

上图就是适配器的示例

(2).举例

之前,在介绍Spring日志的时候,介绍到过Slf4j,slf4j除了使用了门面模式之外,还使用了适配器模式。

Slf4j不同于其他日志框架,它并不是一个真正的日志实现,它只是对日志框架指定了一种规范。所有Slf4j并不能独立使用,需要和具体的日志框架配合使用

此时,slf4j提供了⼀系列打印⽇志的api, 底层调⽤的是log4j 或者 logback来打⽇志, 我们作为调⽤者, 只需要调⽤slf4j的api就⾏了

(二).统一数据返回格式

1.使用

上图是未使用统一功能进行的测试

上图是使用了统一功能的测试

下面就来具体介绍一下

(2).存在问题

但是,统一返回格式也是有问题的

但是,当测试到返回"String"类型的数据的时候,发现报错了

这是报错的日志

如果真的想要彻底搞懂为什么会报错,那么还是需要去看源码,这里就不多介绍了

解决方法就是在这个"同意返回数据格式"的类上进行修改

此时,还有一个问题

当我登录之后访问图书列表,发现并没有显示出数据

后端也没报错

当看前端控制台的时候,发现报错了。可以发现,这个返回的结果被套了两层

同样,通过postman、进行测试的时候也是被套了两层

此时,就发现问题了

获取图书列表的返回格式是Result格式

已经有了这三个属性了,但是由于定义了"统一数据返回格式",

此时,就又被封装了一层,所以会被套了两层

要解决这个问题,还是要修改这个"统一数据返回格式"的代码

(三).统一异常处理

上图是我手动抛出了一个异常,此时我还没有进行统一异常的处理

上图是进行了统一异常的处理

下面就具体来介绍一下"统一异常处理"

同样我们也可以构造不同的异常

统一异常的原因,一方面是为了返回同样的格式,便于前端解析,另一方方面是为了避免某些安全性的问题

如果想要搞懂内部实现逻辑,还是需要翻看原码,这里就不多介绍了

相关推荐
Conan在掘金1 小时前
鸿蒙 7.0 超丝滑方舟引擎:springMotion 物理弹簧动画——真实回弹手感根因
后端
程序员cxuan1 小时前
Codex 接入 DeepSeek-V4-Flash,丝滑的一批
人工智能·后端·程序员
黑桃小柒71 小时前
Prompt 工程的“断舍离“:如何用更少的词让 AI Agent 更聪明
java·后端·spring
Conan在掘金1 小时前
鸿蒙 7.0 星河互联:分布式设备发现 + 跨设备拖放——碰一碰精准分享根因
后端
撩妹帝九歌1 小时前
Java文件写入与编码、字节数组、字符集、字符编解码 一文打通!
java·开发语言
一路向北North1 小时前
Spring AI(9) :解决百炼平台兼容性问题
java·人工智能·spring
2601_965798471 小时前
Build a Consulting Site in 2026: Nifty Theme Practical Review
java·linux·数据库
星核0penstarry1 小时前
Solon AI v4.0.4 技术分析:Java Agent 框架的兼容性突破与选型考量 基于 OSCHINA 2026-07-30 报道及公开技术资料整理
java·开发语言·人工智能
chenzhou__2 小时前
独立游戏开发日志 ①:从信号博弈到涂色对战——一次玩法重构始
笔记·后端·学习·unity·go·独立游戏
CodeSheep2 小时前
hvv员工家属爆料:老公22年入职的,普通员工,老是被误以为高薪多奖金,实际上还没配股,暂时钱没存多少,我倒是很心疼他工作辛苦。
前端·后端·程序员