SpringMVC的拦截器用过没有?

简介: 拦截器常用于登录校验、参数处理、数据脱敏等,通过实现`HandlerInterceptor`接口,并在配置类中注册,限定拦截路径。与过滤器相比,拦截器基于Spring容器,仅拦截Controller请求,而过滤器作用于所有Web资源。异常处理可使用`@RestControllerAdvice`和`@ExceptionHandler`实现全局捕获。常用注解包括`@RequestMapping`、`@RequestBody`、`@RequestParam`、`@PathVariable`、`@ResponseBody`等,简化开发。

·必答内容:
拦截器的应用场景还是很多的,比如在项目中,我们基于拦载器实现登录校验的功能、参数统一转换处理、数据的脱敏、统一编码处理等功能。在SpringBoot项目拦截器的使用分为两步进行:第一步呢,需要定义一个类实现Handlerlnterceptor接口,然后再实现接口中的方法,比如:preHandlepostHandle、afterCompletion.
第二步呢,就是需要定义一个配置类,然后实现WebMvcConfigure,然后在这个配置类中配置拦截器,指定拦载器的拦载路径、排除哪些路径等信息
。可能继续追问的问题:
你说的这些个功能,过滤器好像也能干,那拦载器Interceptor 与 过滤器Filter有什么区别?
接口规范不同:过滤器需要实现Filter接口,而拦载器需要实现Handlernterceptor接口
拦载范围不同:过滤器Filter会拦载web服务器中的所有资源,而Interceptor只会拦截Spring环境的资源,主要就是Controller。
实现机制不同:过滤器在实现上是基于函数回调的,拦截器是基于java的反射机制的,属于面向切面编程的-
种运用。
那其实在开发中,很多的功能,我们既可以通过过滤器Filter来实现,也可以通过拦截器Interceptor来实现
SpringMVC怎么处理异常?
SpringMVC的异常处理,就比较简单了,可以直接使用Spring MVC中的全局异常处理器对异常进行统一处理,此时在我们的三层架构中,都不需要处理异常了,如果运行过程中出现异常,最终会被全局异常处理器捕获,然后返回统一的错误信息。
开发一个全局异常处理器需要使用到两个注解:@RestControllerAdvice、@ExceptionHandler@RestControllerAdvice加在全局异常处理器的这个类上,而@ExceptionHandler加在异常处理的方法上,来指定这个方法捕获什么样的异常。
那在定义异常处理方法的时候,可以也定义多个,根据业务的需求,可以针对不同类型的异常,进行不同的处理.
聊聊SpringMVC中的常用注解?
SpringMVC中的注解就比较多了,平时项目开发中比较常用的注解有以下几个:
1、@RequestMapping:用于映射请求路径,可以定义在类上和方法上。用于类上,则表示类中的所有的方法都是以该地址作为父路径。我们也可以基于该注解中的method属性,来限定请求方式,由此也衍生了几个注解,如:@GetMapping、@PostMapping、@PutMapping、@DeleteMapping.
2、@RequestBody:该注解实现接收请求的json数据,将json转换为java对象
3、@RequestParam:指定请求参数的名称,如果请求参数名与方法形参不一致,可以使用此注解映射绑定也可以使用该注解来设置参数的默认值
4、@PathViriable:从请求路径中获取请求参数(/user/{id}),传递给方法的形式参数。
5、@ResponseBody:注解实现将controller方法返回值直接作为请求体响应,如果返回值是对象/集合,会转化为ison对象响应给客户端

相关文章
|
C++
基于Qt的简易PDF阅读器设计与实现
基于Qt的简易PDF阅读器设计与实现
1280 3
|
机器学习/深度学习 人工智能 算法
以图搜图系统概述
以图搜图系统概述
467 2
以图搜图系统概述
|
安全 Shell Android开发
Android系统 init.rc开机执行shell脚本
Android系统 init.rc开机执行shell脚本
4050 0
|
6月前
|
JSON 监控 API
京东商品列表API秘籍!轻松获取商品列表数据
京东商品列表API是京东开放平台的核心接口,支持通过编程获取商品数据,适用于电商分析、价格监控等场景。提供关键词搜索、分类筛选、价格区间、排序及分页功能,采用HTTPS请求,返回JSON数据,具备高并发稳定性。附Python请求示例,便于快速集成调用。
|
2月前
|
Java Spring 容器
Spring Boot配置的优先级?
SpringBoot项目支持多种配置方式,主要包括配置文件(application.properties、.yml、.yaml)和外部配置(如系统属性、命令行参数)。优先级由高到低为:命令行参数 > 系统属性 > .properties > .yml > .yaml。自动配置核心是@SpringBootApplication中的@EnableAutoConfiguration,通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类,并结合@Conditional条件注解按需注入Bean。
|
11月前
|
自然语言处理 JavaScript 前端开发
从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值
Chroma 提供了一种新型的搜索方式,通过语义搜索替代传统的关键词匹配,大大提高了信息检索的精度和用户体验。在信息爆炸的时代,语义搜索的出现满足了人们对高效信息获取的需求。随着大模型的发展,Chroma 等技术将会进一步提升信息检索的智能化水平,为各类应用场景带来更多可能性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值
|
Linux 数据处理 开发工具
Linux命令RepoManage详解
Repo是Google为大型项目开发的Git管理工具,用于多仓库同步和管理,常用于Android开发。它基于一个manifest文件协调Git仓库。主要命令包括`init`、`sync`、`start`和`upload`。例如,`repo init -u https://android.googlesource.com/platform/manifest`初始化项目,`repo sync`同步代码。使用`repo forall`可配合Git命令在所有仓库执行操作,如切换分支。注意网络、版本和权限问题,并遵循最佳实践进行高效管理。
|
机器学习/深度学习 数据采集 人工智能
AI技术实践:利用机器学习算法预测房价
人工智能(Artificial Intelligence, AI)已经深刻地影响了我们的生活,从智能助手到自动驾驶,AI的应用无处不在。然而,AI不仅仅是一个理论概念,它的实际应用和技术实现同样重要。本文将通过详细的技术实践,带领读者从理论走向实践,详细介绍AI项目的实现过程,包括数据准备、模型选择、训练和优化等环节。
1424 3
|
网络协议 JavaScript 前端开发
Node.js的网络编程:深入TCP/UDP网络编程
【4月更文挑战第29天】本文介绍了如何在Node.js中进行TCP和UDP网络编程。使用net模块,可以创建TCP服务器和客户端,实现可靠的数据传输。例如,通过`net.createServer()`创建服务器,监听数据、关闭和错误事件。客户端使用`net.createConnection()`连接服务器并通信。另一方面,dgram模块用于UDP编程,创建UDP套接字并绑定端口,通过`server.send()`发送和接收数据报。TCP提供连接和数据可靠性,适合需要顺序和完整性的场景,而UDP更轻量级,适用于实时性要求高的应用。Node.js的网络编程能力使其成为开发高效网络应用的理想选择。
|
缓存 API 数据库
构建高效Python Web应用:Flask框架与RESTful API设计原则
【5月更文挑战第20天】 在现代Web开发中,构建一个轻量级且高效的后端服务至关重要。本文将深入探讨如何使用Python的Flask框架结合RESTful API设计原则来创建可扩展和易于维护的Web应用程序。我们将通过分析Flask的核心特性,以及如何利用它来实现资源的合理划分、接口的版本控制和请求处理优化等,来指导读者打造高性能的API服务。文中不仅提供了理论指导,还包括了实践案例,旨在帮助开发者提升开发效率,并增强应用的稳定性和用户体验。