SpringBoot统一功能的处理

news2024/11/7 7:36:53

目录

SpringBoot拦截器

自定义拦截器

将自定义拦截器加入系统配置项

统一异常处理

创建异常处理类

 实现业务方法

统一数据返回格式

为什么需要统一数据返回格式

统一数据返回格式的实现

返回String时的报错愿意及处理方案


SpringBoot拦截器

使用SpringBoot拦截器来实现用户登录权限的校验.

如果使用SpringAOP来实现用户登录权限的校验会有两个问题:没办法获取到HttpSession对象;要对一部分方法进行拦截,一部分方法不进行拦截比如注册方法和登录方法,这样的话排除方法的规则很难定义,甚至没办法定义.

SpringBoot拦截器的实现分为两大步:自定义拦截器和将自定义拦截器加入到系统配置项.

自定义拦截器

创建自定义的拦截器,实现HandlerInterceptor接口的prehandle(执行目标方法之前的预处理方法)方法.

这里主要演示拦截器的实现,在项目中我们一般在返回false前要向前端返回特定json字符串来阐述此次交互是否成功,如果失败,失败的原因是什么.

将自定义拦截器加入系统配置项

将自定义拦截器加入WebMvcConfigurer的addInterceptors方法中.

addPathPatterns表示要拦截的url,"**"则表示拦截所有的方法.
excludePathPatterns表示要排除的url.

以上的拦截规则可以拦截此项目中使用的url包括静态文件(图片文件,js,css等).

加入了拦截器之后,程序正常的调度顺序:

小结:SpringBoot拦截器实现原理是基于SpringMVC框架的拦截器机制,当客户端发送请求时,请求会经过一系列的组件处理,其中就包括拦截器.


统一异常处理

进行统一异常处理就是为了无论后端程序是怎么执行的,都要给前端一个正常的响应.

实现统一的异常处理分为两步:创建一个异常处理的类和实现异常检测的处理方法.

创建异常处理类

加@ControllerAdvice注解就会监测到整个项目中的异常,并且也会有@Controller注解的功能.

 实现业务方法

这是一个处理空指针异常的方法,在捕捉到项目中的空指针异常的时候就会触发此异常处理方法,方法的业务代码是由程序员自主实现的,返回给前端特定字段.在项目中我们会实现统一的数据格式返回.在这里只是使用HashMap构造了三个字段.

 访问接口出现空指针的时候返回的状态码是200,响应字段就是我们设置的三个字段.这样就会给前端明确的信息.

我们还要在类里实现一个匹配所有异常的方法

这就是默认的异常处理,当具体的异常匹配不到的时候,会执行此方法.


统一数据返回格式

为什么需要统一数据返回格式

  1. 方便前端程序员更好的接收和解析后端数据接口返回的数据.
  2. 降低前端程序员和后端程序员的沟通成本,按照某个格式实现就行了,所有的接口都是这样返回的.
  3. 有利于项目统一数据的维护和修改.
  4. 有利于后端技术部门的统一规范的标准制定,不会出现稀奇古怪的返回内容.

统一数据返回(强制性统一数据返回),会在返回数据之前进行数据的重写,这是一种保底策略.

统一数据返回格式的实现

统一数据返回格式使用@ControllerAdvice和ResponseBodyAdvice的方式实现.在数据返回给前端之前进行数据的重写,参数里的body就是controller方法里返回的结果(原返回值).

 


返回String时的报错愿意及处理方案

当统一数据格式返回遇到原body是String的时候会报错:

说的是hashmap不能转换成string.

出现这个问题的原因是:返回的执行流程是分为三步的.

1.方法返回的是string

2.统一数据返回之前处理:String转换成HashMap

3.将HashMap转换成application/json字符串给前端(接口)

那么出现这个问题的原因就在第三步上.在执行第三步的时候会先判断原body的类型,如果是string就会使用StringHttpMessageConverter进行转换,不是string就使用HttpMessageConverter进行类型转换.在这个地方,如果是string了,就会使用尝试StringHttpMessageConverter把第二部的HashMap转成String JSON字符串,这样就出错了.判断是用的原body,转换是用的HashMap.

这样就会报出HashMap不能转换成String的错误.

解决方案:

1.将StringHttpMessageConverter去掉

2.在统一数据重写的时候,单独处理string类型,让其返回一个string字符串,而非HashMap.

 

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

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

相关文章

Figma文件保存图片教程,4个详细步骤一网打尽!

在设计领域中,Figma 作为一款备受欢迎的在线协同设计软件,给设计师们带来了许多便利。然而,Figma 目前并不能直接保存图片。那么,有没有什么方法可以解决这个问题呢?答案是使用「即时设计」,这是一款国产的…

Git初始化提交项目代码并与远端建立连接

如题 闲来无事,炒个冷饭。。。 步骤 1. 先本地建仓库 方法一: 执行命令(使用git bash或者类似工具,或者IDEA下terminal命令行): git init会在当前目录下创建一个新的空Git库。 方法二: 在…

JDBC API 万字详解(通俗易懂)

目录 一、前言 二、JDBC API概述 三、获取连接的三种方式 0.朝花夕拾 : 1.方式一 —— 通过new关键字 : 2.方式二 —— 通过反射机制 : 3.方式三 —— 通过DriverManager Δ方式三简化版 Δ方式三优化版 四、 ResultSet 1.简介 : 2.代码演示 : 3.底层实现 : 五、SQL…

20分钟搞定 Stable Diffusion 模型在线服务部署

文章目录 AIGC之 AI 绘画20分钟搞定 Stable Diffusion 模型在线服务部署认识 Amazon SageMaker借助 Amazon SageMaker 进行环境搭建和模型推理1. 创建 jupyter notebook 运行环境2. 一键运行所有代码 关键代码分析如下1. 环境准备,代码模型下载2. 在Notebook中配置并…

Next 主题配置

当前用得最多的是next主题,那为什么用得多呢?当然是符合大多数人的审美。我使用的是next(v7.8.0),下载地址:theme-next/hexo-theme-next 1 基本设置 1.1 主题设置 打开博客根目录 Blog 文件夹,右键 Git Bash&#xf…

制作投票链接怎么做微信上投票连接怎么样做投票链接

关于微信投票,我们现在用的最多的就是小程序投票,今天的网络投票,在这里会教大家如何用“活动星投票”小程序来进行投票。 我们现在要以“小手绘盛夏”为主题进行一次投票活动,我们可以在在微信小程序搜索,“活动星投票…

RuoYi-Cloud本地运行

启动nacos bin目录打开cmd,输入startup.cmd -m standalone,单机模式启动 http://localhost:8848/nacos/ 用户名密码都是nacos 启动redis 在 D:\Redis-x64-3.2.100 目录下 按shift鼠标右键,打开powerShell,输入 .\redis-server…

2023最新版本Activiti7系列-流程变量

流程变量 流程变量可以用将数据添加到流程的运行时状态中,或者更具体地说,变量作用域中。改变实体的各种API可以用来更新这些附加的变量。一般来说,一个变量由一个名称和一个值组成。名称用于在整个流程中识别变量。例如,如果一个…

在 Android 上恢复已删除的通话记录 - 安卓手机通话记录恢复技巧

有时,Android 用户会在内存空间用完时删除他们的通话记录。他们认为那些电话通话记录将不再需要了,但突然出于某些原因他们需要恢复那些已删除的通话记录。 恢复已删除的照片、视频、音乐、短信和通话记录等数据在以前是一件很难的事情。但是现在如果你…

# 蓝牙音频相关知识

蓝牙音频相关知识 文章目录 蓝牙音频相关知识1 音频源2 蓝牙音频编解码器3 一些标准4 蓝牙音频其他相关知识4.1 蓝牙版本4.2 ANC(主动降噪)4.3 音响相关参数4.4 音质评价4.5 HI-Fi声音特点4.6 耳机线材4.7 耳机分类4.8 IP防尘防水等级4.9 噪音与量化噪音…

如何用Python语言调取百度翻译的API

诸神缄默不语-个人CSDN博文目录 本文介绍如何用Python语言调用百度翻译的API服务。 理论上类似的写法也可以应用于其他语言。 http://api.fanyi.baidu.com/manage/developer可以注册开发者,或者APP ID和秘钥;然后还可以进行开发者认证,获得…

ajax-1--XML、AJAX简介、express框架使用、AJAX操作的基本步骤

一、XML(可扩展标记语言) XML与HTML类似,不同的是HTML中都是预定义标签,而XML中没有预定义标签,全都是自定义标签,用来表示一些数据。 比如有一个学生数据:name“孙悟空”;age18;gender“男”&a…

【Python实战】Python采集大学教务系统成绩单

前言 在现代教育中,教务系统已经成为了学校管理和教学工作的重要组成部分。然而,由于各种原因,教务系统的成绩单并不能下载的,这给我们带来了很多不必要的麻烦和困扰。因此,采集教务系统成绩单的项目具有非常重要的意义…

【轻量化网络系列(6)】EfficientNetV1论文超详细解读(翻译 +学习笔记+代码实现)

前言 EfficientNetV1是Google在2019年发布的文章,这篇论文最主要的创新点是Model Scaling。论文提出了compound scaling,混合缩放,把网络缩放的三种方式:深度、宽度、分辨率,组合起来按照一定规则缩放,从…

使用FPGA驱动GS2972(3G-SDI模式)外同步(HSYNC VSYNC DE)或内(BT1120)同步输出彩条调试

GS2972视频输出调试 一、外同步模式1.1 GS2972的硬件初始化1.2 GS2972的驱动时序1.3 GS2972的驱动RTL代码1.4 GS2972输出彩条1.5 GS2972驱动易出bug二、数据内嵌同步模式2.1 GS2972的硬件初始化2.2 GS2972的驱动时序2.3 GS2972的驱动RTL代码2.4 GS2972输出彩条2.5 GS2972驱动易…

IIC总线简介及IIC的通信过程与时序

1.IIC总线简介 IIC总线: IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线,主要用于近距离、低速的芯片之间的通信;IIC总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟…

跳槽一次涨8k,5年跳了3次...

最近有人说,现在软件测试岗位初始工资太低了,有些刚刚入行的测试朋友说自己工资连5位数都没有…干了好几年也没怎么涨。 看看别人动辄月薪1-2万,其实我想说也没那么难。 说下如何高效地拿到3万的工资,总体来说,就靠跳…

墨天轮关系型分布式数据库榜单解读

分布式关系型数据库概述 作为数据库演进方向之一,分布式能力受到更多用户的关注。从技术架构演进来看,数据库正走过了从单机式、集中式到分布式的发展过程,目前是多种架构并存的阶段。分布式架构以其更好的存储与计算扩展能力,受…

四六位、不定长、计算题等验证码,一款工具全部搞定,简单方便还开箱即用,精度高达96%!!

四六位、不定长、计算题等验证码,第三方平台准确率低,自己不会神经网络训练,嫌麻烦,一款工具全部搞定,开箱即用!! 本文秉承着开箱即用的原则,真正做到一款工具识别秒杀所有单行文本验证码,这里的单行指的就是某张4位6位或者计算题或者文字的验证码,我是使用了4位+6位…

Vue2数据代理的理解

理解 最近在复习Vue2,对于数据代理有些模糊。查阅了一些资料。 这是官方解释https://v2.cn.vuejs.org/v2/api/#data数据代理:通过代理对象 操作(读/写)目标对象中的属性 这里出现了两个对象,一个叫代理对象&#xf…