SpringBoot统一功能处理

1.拦截器 拦截器是Spring框架提供的核心功能之一,主要是用来拦截用户的请求,在指定方法前后,根据业务需要执行预先设定的代码.允许开发人员提前预定一些逻辑,在用户的请求响应前后执行,也可以在用户请求前组织其执行.在拦截器当中,开发人员可以在应用程序中做一些通用性的操作,比如通过拦截器来拦截前端发来的请求,判断session中是否有登录用户的信息,如果有就可以放行,如果没有就进行拦截.1.1拦截器的使用:主要分为两步,定义拦截器和注册配置拦截器.首先是自定义拦截器:实现HandlerInterceptor接口,并重写其所有方法. 注册配置拦截器:实现WebMvcConfigurer接口,并重写addInterceptors方法. 这里执行访问 日志显示如下: 可以看到是执行了LoginInterceptor方法的,这里把preHandle方法的返回值改为false观察日志. 可以看到这里只执行了preHandle方法,并且前端也没有显示测试.说明拦截器拦截了请求,没有进行响应.

1.2拦截器详解:定义拦截器主要是通过实现HandlerInterceptor接口中的方法实现的.前面只是简单的把拦截路径设置为对所有请求,下面进行详细的解释: 通过addPathPatterns()方法指定要拦截那些请求,通过excludePathPatterns()指定不拦截那些请求. 下面是一些说明

|------------|--------------|------------------------------------------|
| 拦截路径 | 含义 | 例子 |
| /* | 一级路径 | 可以匹配类外的@RequestMapping()中的所有路径 |
| /** | 任意路径 | 可以匹配任意路径 |
| /test/* | /test下的一级路径 | 可以匹配/test/test1,不可以匹配/test,/test/test1/t |
| /test/** | /test下的任意级路径 | 可以匹配以test为一级路径的所有请求 |

拦截器并不仅仅对于使用注解的路径生效,可以拦截项目中的所有URL,包括静态文件,如JS,CSS等文件.

1.3拦截器的执行流程

添加拦截器之后,在执行Controller的方法之前,请求会先被拦截器拦截住,执行preHandle()方法,这个方法需要返回一个布尔类型的值,如果返回true,表示执行本次操作,继续访问Controller中的方法,如果返回false,则不会执行放行. 在Controller当中的方法执行完毕后,再回来执行postHandle()这个方法以及afterCompletion()方法,执行完毕之后,最终给浏览器响应数据.拦截器在保证项目的安全性方法有广泛的应用.

2.统一异常处理:统一异常处理使用的是@ControllerAdvice+@ExceptionHandler来实现的.@ControllerAdvice表示控制器通知类,@ExceptionHandler是异常处理类,两个结合表示当出现异常的时候执行某个通知.下面是一个简单的统一异常处理:
做一个简单的测试:

访问这个方法,可以发现前端显示了错误信息: 这只是一个简单的处理,也可以使用多个@ExceptionHandler(异常处理器)对不同的异常进行处理. 这里是针对几种异常,返回对应的异常信息.当有多个异常通知时,匹配顺序为当前类及其子类向上依次匹配.

当然实际中,这里的返回一定不是简单的返回异常信息,通常会有统一的结果返回.

3.统一结果返回,和异常处理类似.使用@ControllerAdvice和ResponseBodyAdvice的方式实现.@ControllerAdvice表示控制器通知类.ResponseBodyAdvice是一个接口.下面是一个例子:注意如果返回的数据是String类型是需要转化成json.

相关推荐
weixin_7275356230 分钟前
MinIO大文件上传深度拆解:从原理到生产落地的完整指南
java·中间件
摇滚侠1 小时前
Java 全栈开发实战教程 课程笔记 34-36
java·笔记
芝士熊爱编程1 小时前
创建型模式-单例模式
java·单例模式·设计模式
程序猿DD1 小时前
OPC必备!在 Cloudflare Worker 上免费部署 AI 网关:集中管理与供应 Token
后端
大模型码小白1 小时前
Spring AI 框架实战:Java 后端集成大模型的架构设计与工程落地
java·人工智能·python·spring
LucianaiB1 小时前
遇到 Seed Evolving,我终于把脑海里的小说世界图谱做出来了:《斗破苍穹》篇
后端
weixin_BYSJ19872 小时前
「课设设计」springboot校园超市助购系统26449 (附源码)
java·javascript·spring boot·python·django·flask·php
栋***t2 小时前
从“纸质试卷”到“AI智能组卷”,麦塔在线考试系统如何重构出题逻辑?
java·大数据·人工智能·算法·重构
CHANG_THE_WORLD2 小时前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
xexpertS2 小时前
CI/CD 熔断机制:如何通过编排级熔断器提升开发者效率
java·linux·运维