Spring Boot :统一功能处理

news2025/1/19 13:16:30

        在用户登陆验证的业务中,如果只是使用Spring AOP的话,session无法获取的,还有各种参数(request等)很难获取,这时候Spring拦截器就发挥了重大的作用了。

       1.Spring 拦截器

创建拦截器分俩步:1.创建自定义拦截器 2.将自定义加入到WebMvcConfigurer 的 addInterceptors
方法中

        上图是创建自定义拦截器的具体细节。要注意的是preHandle方法返回的是boolean类型,如果返回的是true的话就证明拦截器验证成功,后续的业务代码正常执行,如果是false的话,证明验证不成功,后续的流程的业务代码就不要运行了。 

         这一步就是将拦截器加入到系统配置中。

 以上的操作就实现了简单的拦截器的功能了,拦截所有除了img和login路径的所有url。

2.拦截器实现原理

        正常的业务逻辑是用户调用的时候,先到了controller层再到service层再到Mapper层最后调用数据库,而在加上拦截器之后,就会在Controller层之前进行了一个预处理也就是加了个拦截器。

        所有的 Controller 执⾏都会通过⼀个调度器 DispatcherServlet 来实现,⽽所有⽅法都会执⾏ DispatcherServlet 中的 doDispatch 调度⽅法,在开始执⾏ Controller 之前,会先调⽤ 预处理⽅法 applyPreHandle,在 applyPreHandle 中会获取所有的拦截器 HandlerInterceptor 并执⾏拦截器中
的 preHandle ⽅法,这样就会咱们前⾯定义的拦截器对应上了。

3.统一异常处理

一样的分俩步进行操作:

        3.1创建一个异常处理类

         3.2 创建业务方法

 

要知道的是第二个业务方法是保底操作。

结果:

 我们要注意的是这里优先匹配的是空指针,所以总结下来:优先匹配子类,找不到再往上找。

 

4. 统一数据返回

                        统⼀数据返回格式的优点有很多,⽐如以下⼏个:
1. ⽅便前端程序员更好的接收和解析后端数据接⼝返回的数据。
2. 降低前端程序员和后端程序员的沟通成本,按照某个格式实现就⾏了,因为所有接⼝都是这样返回的。
3. 有利于项⽬统⼀数据的维护和修改。
4. 有利于后端技术部⻔的统⼀规范的标准制定,不会出现稀奇古怪的返回内容。

 统⼀的数据返回格式可以使⽤ @ControllerAdvice + ResponseBodyAdvice 的⽅式实现:

 

以上的代码无论你是返回一个hashmap类型还是int类型 到最后返回到前端都是规定好的hashmap数据,这就很规范了,但是还有一个问题:

4.1 如果controller返回的String会报错

        我们知道我们是想把这个String转成hashmap的,但是为什么会报hashmap无法转成String的错误呢?

        先看这统一数据返回的执行流程

分为三步:

        1.方法返回的String       

        2.统一数据返回之前的处理:String -> HashMap

        3.将HashMap转成 application/json 的字符串

        这时候我们就能看出来问题是出现在第三步了,第三步的具体细节是:它会先判断源body值是String还是其他类型,如果是String会使用StringHttpMessageConverter进行转换,其他的类型则是会使用HttpMessageConverter进行转换,但是现在是用HashMap转成成字符串的,而使用的这个转换器只能将String类型转换字符串,因此会报错。

总结一下就是当前的你拿到的数据不是String但是你用的转换器确实String的,当然会报错了。

4.2 报错的解决方案

        4.2.1 去掉StringHttpMessageConverter

        加一个配置就ok了。

@Configuration
public class MyConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.removeIf(converter -> converter instanceof StringHttpMessageConverter);
    }
}

        4.2.2 在数据统一重写时单独处理String类型,让其返回一个String字符串不是HashMap

        这个也有俩种方式,一个是自己拼一个json格式的字符串。还有一个就是jackson工具将源String转成json格式的字符串。

 

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目集效益管理

项目集效益管理是定义、创建、最大化和交付项目集所提供的效益的绩效领域。 本章内容包括&#xff1a; 1 效益识别 2 效益分析和规划 3 效益交付 4 效益移交 5 效益维持 项目集效益管理包括一系列对项目集的成功极为重要的要素。项目集效益管理包括阐明项目集的 计划效益和预期…

AMBER分子动力学模拟之结果分析(最低能量结果)-- HIV蛋白酶-抑制剂复合物(3)

AMBER分子动力学模拟之结果分析(最低能量结果)-- HIV蛋白酶-抑制剂复合物(3) 在analysis目录下 解析.out文件 下载process_mdout.perl 脚本 perl process_mdout.perl ../md/md0.out ../md/md1.out ../md/md2.out # 可以不使用md0.out # 或者 $AMBERHOME/bin/process_md…

ShardingSphere 5.3 系列ShardingSphere-Proxy保姆级教程 | Spring Cloud 50

一、前言 通过以下系列章节&#xff1a; Spring Boot集成ShardingSphere实现数据分片&#xff08;一&#xff09; | Spring Cloud 40 Spring Boot集成ShardingSphere实现数据分片&#xff08;二&#xff09; | Spring Cloud 41 Spring Boot集成ShardingSphere实现数据分片&…

Linux:centos:组账户管理 》》添加组,用户加入组(设置组密码),删除组,查询账户信息,查询登录用户信息

/etc/group # 组信息文件 /etc/gshadow # 组密码文件&#xff08;不常用&#xff09; groupadd &#xff08;属性&#xff09; 组名 # 新建组 groupdel &#xff08;属性&#xff09; 组名 # 删除组 gpasswd # 可以…

Cartographer源码阅读---番外篇: Submap封装与维护

Cartographer中Submap(子图)没有被直接的调用进行维护, 而是针对2D和3D场景分别派生出子类Submap2D和Submap3D, 进行调用. 以2D为例, 为了方便维护, 又把Submap2D封装成了ActiveSubmaps2D进行维护, 其维护方式类似与滑窗, 也是只维护最近的一些数据. 1. Submap类 /*** brief …

Python学习之生成带logo背景图的二维码(静态和动态图)

前言 二维码简称 QR Code&#xff08;Quick Response Code&#xff09;&#xff0c;学名为快速响应矩阵码&#xff0c;是二维条码的一种&#xff0c;由日本的 Denso Wave 公司于 1994 年发明。现随着智能手机的普及&#xff0c;已广泛应用于平常生活中&#xff0c;例如商品信息…

探索三维世界【4】:Three.js dat.gui gsap 的使用

探索三维世界【4】&#xff1a;Three.js & dat.gui & gsap 的使用 1、dat.gui是什么&#xff1f;2、gsap的介绍与使用2.1、前提准备工作&#xff08;绘制一个BoxGeometry&#xff09;2.2、安装引入gsap动画库2.3、使用gsap动画2.4、配合事件使用 3、使用dat.gui3.1、添…

生物信息学知识点

生物信息学知识点 1. 序列比对&#xff1a;1.1 基本概念&#xff1a;1.2 全局比对和局部比对&#xff1a;1.3 空位罚分的改进&#xff1a;1.4 同源性和相似性&#xff1a;1.5 相似性矩阵&#xff1a;1.5.1 PAM&#xff1a;1.5.2 BLOSUM&#xff1a; 2. BLAST算法&#xff1a;2.…

React | React的过渡动画

✨ 个人主页&#xff1a;CoderHing &#x1f5a5;️ React.js专栏&#xff1a;React的过渡动画 &#x1f64b;‍♂️ 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; &#x1f4ab; 系列专栏&#xff1a;吊打面试官系列 16天学会Vue 11天学会React Node专栏 &#…

Grafana之Clock Panel使用(06)

Clock Panel可以用来显示当前(各国)时间或用于倒计时,并支持每秒更新一次。 Clock plugin for Grafana | Grafana Labs Clock Panel也是Grafana Labs提供,但并非Native,需自行安装,安装命令如下: # grafana-cli plugins install grafana-clock-panel # systemctl …

前端面试题 — — vue篇

前端面试笔记之vue篇 前言1.数据双向绑定原理⭐⭐⭐2. VUE生命周期⭐⭐⭐3.组件之间如何传值⭐⭐⭐4.路由之间如何传参⭐5.谈一谈VUEX⭐⭐6.如何解决VUEX页面刷新数据丢失问题&#xff1f;⭐⭐7.computed和watch的区别&#xff1f;⭐⭐⭐8.如何封装axios&#xff1f;⭐9.Route和…

APP和小程序共同塑造现代化政务服务

随着移动互联网的飞速发展&#xff0c;政务服务也开始向移动端转移&#xff0c;政务App和小程序结合&#xff0c;可以使政府更好地实现数字化转型和提供优质的政务服务。本文将探讨政务App和小程序的结合优势&#xff0c;以及如何推进政务App和小程序的发展。 移动政务服务应用…

RTSP/RTP on TCP 协议抓包记录

仅做记录&#xff0c;无他。 RTSP OPTIONS 客户端发送&#xff1a; 服务端响应 RTSP DESCRIBE 客户端发送 服务端响应 RTSP SETTUP 客户端发送请求 服务端响应 RTSP PLAY 客户端发送请求 服务端响应 RTP包 这个比较复杂&#xff0c;得好好解析&#xff0…

Git 解决missing Change-Id in message footer

ERROR: commit b007456: missing Change-Id in message footer 无论是linux 还是 window 出现这个&#xff0c;提示都是一样的&#xff0c;按照提示执行就好&#xff0c;网上基本都是这么说的&#xff0c;有的基本都是抄来抄去。 window 遇到这个问题解决步䠫&#xff1a; …

数学天才陶哲轩主持白宫生成式AI工作组,李飞飞、Hassabis发表演讲

夕小瑶科技说 分享 来源 | 新智元 最近&#xff0c;「数学天才」陶哲轩表示&#xff0c;自己将领导白宫生成式人工智能工作组&#xff0c;就当前AI评估并收集意见。在陶哲轩看来&#xff0c;加入工作流的ChatGPT在数学专业领域中&#xff0c;并没有太多增值。 近来&#xff0c…

Windows 环境解压 zip 压缩包乱码问题

前言 最近在接受他人上传的 ZIP 压缩包时&#xff0c;发现解压后文件名出现了乱码&#xff0c;记得自己很久以前似乎把系统的编码改为了 UTF&#xff0c;所以盲猜是压缩包发送人的系统使用了 GBK 编码&#xff0c;出现了错误。 正文 探索 搜了一下&#xff0c;发现了知乎上一…

360°VR全景图片,探索未知,畅游全景

随着科技的不断发展&#xff0c;人们对于视觉的需求越来越高&#xff0c;单一平面的图片已经无法满足人们的需要。360VR全景图片的出现填补了这个空白&#xff0c;它以其全景视角和互动体验&#xff0c;为我们带来了一场视觉盛宴。下面就让我们一起来探讨一下360VR全景图片的特…

网易云商·七鱼智能客服自适应 ProtoStuff 数据库缓存实践

需求背景 目前&#xff0c;网易云商七鱼智能客服数据库缓存使用了 spring-data-redis 框架&#xff0c;并由自研的缓存组件进行管理。该组件使用 Jackson 框架对缓存数据进行序列化和反序列化&#xff0c;并将其以明文 JSON 的形式存储在 Redis 中。 这种方式存在两个问题&…

(数字图像处理MATLAB+Python)第八章图像复原-第三、四节:图像复原代数方法和典型图像复原方法

文章目录 一&#xff1a;图像复原代数方法&#xff08;1&#xff09;无约束最小乘方复原&#xff08;2&#xff09;约束复原 二&#xff1a;典型图像复原方法&#xff08;1&#xff09;逆滤波复原A&#xff1a;概述B&#xff1a;程序 &#xff08;2&#xff09;维纳滤波复原A&a…

【C语言】负数取模、取余

文章目录 一. 关于“取整”1. 向0取整2. 向负无穷取整3. 向正无穷取整4. 四舍五入式的取整 二. 关于“取模”的本质三. 取余和取模的区别 一. 关于“取整” 首先谈谈关于数学取整的问题 1. 向0取整 C中的除法和取整规则都是向0取整&#xff0c;即所有小数都向 0 的方向取整&…