重学SpringBoot3-WebMvcConfigurer接口
摘要:
本文详细介绍了SpringBoot 3中的WebMvcConfigurer接口,旨在帮助读者深入理解其原理和实现,从而能够更好地使用SpringBoot进行Web开发。阅读本文需要大约30分钟。
关键词:SpringBoot, WebMvcConfigurer, SpringMVC, Web开发
引言
背景介绍
SpringBoot作为一款优秀的Java Web开发框架,极大地简化了Web应用的配置和管理。WebMvcConfigurer接口是SpringBoot中用于定制SpringMVC配置的重要接口。
文章目的
本文旨在深入解析WebMvcConfigurer接口,帮助读者掌握其使用方法和原理。
基础知识回顾
基本概念
WebMvcConfigurer接口是SpringBoot中用于配置SpringMVC的接口,通过实现该接口,可以定制SpringMVC的各种行为。
核心组件
WebMvcConfigurer接口主要包括以下核心方法:
- configureMessageConverters:配置消息转换器
-
- configureContentNegotiation:配置内容协商策略
-
- configureViewResolvers:配置视图解析器
-
- addInterceptors:添加拦截器
-
- addCorsMappings:配置跨域请求映射
-
- addFormatters:添加格式化器
工作流程
SpringBoot启动时,会自动扫描实现WebMvcConfigurer接口的Bean,并调用其方法完成SpringMVC的配置。
需求分析
假设我们需要自定义一个拦截器,用于处理所有请求。我们可以通过实现WebMvcConfigurer接口,并重写addInterceptors方法来实现。
设计方案
- 创建一个拦截器类,实现HandlerInterceptor接口。
-
- 在拦截器中重写preHandle、postHandle和afterCompletion方法。
-
- 创建一个配置类,实现WebMvcConfigurer接口。
-
- 在配置类中重写addInterceptors方法,将自定义拦截器添加到拦截器链中。
实现步骤
- 创建拦截器类:
public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在请求处理之前进行调用return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行}}```
2. 创建配置类:
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor());}}
技巧与实践
概念介绍
- 拦截器:用于拦截请求并进行处理,可以用于日志记录、权限校验等场景。
-
- 内容协商:用于根据客户端请求的Accept头,选择合适的消息转换器。
常见问题与解答
Q1:如何添加全局异常处理器?
A1:通过实现WebMvcConfigurer接口,并重写configureHandlerExceptionResolvers方法,可以添加全局异常处理器。
Q2:如何配置静态资源映射?
A2:通过实现WebMvcConfigurer接口,并重写addResourceHandlers方法,可以配置静态资源映射。
结论与展望
WebMvcConfigurer接口为SpringBoot的Web开发提供了极大的便利,通过定制SpringMVC的各种行为,我们可以更好地实现业务需求。
未来,随着SpringBoot版本的迭代,WebMvcConfigurer接口可能会有更多的新特性,我们需要不断学习,跟上技术发展的步伐。
相关文章:
重学SpringBoot3-WebMvcConfigurer接口
摘要: 本文详细介绍了SpringBoot 3中的WebMvcConfigurer接口,旨在帮助读者深入理解其原理和实现,从而能够更好地使用SpringBoot进行Web开发。阅读本文需要大约30分钟。 关键词:SpringBoot, WebMvcConfigurer, SpringMVC, Web开发…...

《深入理解springCloud与微服务》笔记
第一章 微服务介绍 1.3 微服务的不足 1.3.2 分布式事务 CAP 理论,即同时满足“一致性”“可用性”和“分区容错”是 件不可能的事。 Consistency :指数据的强一致性。如果写入某个数据成功,之后读取,读到的都是新写入的数据&a…...
Vivado原语模板
1.原语的概念 原语是一种元件! FPGA原语是芯片制造商已经定义好的基本电路元件,是一系列组成逻辑电路的基本单元,FPGA开发者编写逻辑代码时可以调用原语进行底层构建。 2.原语的分类 原语可分为预定义原语和用户自定义原语。预定义原语为如and/or等门级原语不需要例化,可以…...

【linux本地安装tinycudann包教程】
【linux本地安装tinycudann包教程】 tiny-cuda-nn官网链接 如果你是windows 10系统的,想要安装tiny-cuda-nn可以参考我的文章——windows 10安装tiny-cuda-n包 根据官网要求:C++要求对应14,其实这样就已经告诉我们linux系统中的gcc版本不能高于9,同时下面又告诉我们gcc版…...

使用Nginx进行负载均衡
什么是负载均衡 Nginx是一个高性能的开源反向代理服务器,也可以用作负载均衡器。通过Nginx的负载均衡功能,可以将流量分发到多台后端服务器上,实现负载均衡,提高系统的性能、可用性和稳定性。 如下图所示: Nginx负…...

什么护眼台灯效果好?热门护眼台灯全方位测评推荐
台灯可以说是佳佳必备,尤其是家中有正在上学的孩子的更是需要一款好的台灯,不管是看书、写字都离不开台灯。不过很多家长在挑选台灯时往往仅关注到光线亮度是否充足,而忽略掉光线均匀度、舒适度等等方面的问题。所以选择一款优质的护眼台灯是…...

云上三问,迈向智能时代的关键
在今天的中国,第一热词是什么?面对这个问题,“新质生产力”当仁不让,而智能化技术毫无疑问是“新质生产力”最重要的来源之一。 在这样的大势下,大型政企是向新技术要“新质生产力”的时代先锋。云服务,则是…...

【网络安全】手机不幸被远程监控,该如何破解,如何预防?
手机如果不幸被远程监控了,用三招就可以轻松破解,再用三招可以防范于未然。 三招可破解可解除手机被远程监控 1、恢复出厂设置 这一招是手机解决软件故障和系统故障的终极大招。只要点了恢复出厂设置,你手机里后装的各种APP全部将灰飞烟灭…...
每日OJ题_哈希表④_力扣219. 存在重复元素 II
目录 力扣219. 存在重复元素 II 解析代码 力扣219. 存在重复元素 II 219. 存在重复元素 II 难度 简单 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&am…...

42.坑王驾到第八期:uniCloud报错
uniCloud 报错 今天调用云函数来调试小程序的时候突然暴了一个奇葩错误,require(…).main is not a function。翻官方文档后发现,原来是这样:**如果你写的是云对象,入口文件应为 index.obj.js,如果你写的是云函数入口…...

Linux常用操作命令
Linux常用操作命令 1.文件管理catfile 2.文档编辑3.文件传输4.磁盘管理5.磁盘维护6.网络通讯7.系统管理8.系统设置9.备份压缩10.设备管理 Linux 英文解释为 Linux is not Unix。 Linux内核最初只是由芬兰人李纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上…...

OpenCV的常用数据类型
OpenCV涉及的常用数据类型除包含C的基本数据类型,如:char、uchar,int、unsigned int,short 、long、float、double等数据类型外, 还包含Vec,Point、Scalar、Size、Rect、RotatedRect、Mat等类。C中的基本数据类型不需再做说明下面重点介绍一下…...

STM32串口通信—串口的接收和发送详解
目录 前言: STM32串口通信基础知识: 1,STM32里的串口通信 2,串口的发送和接收 串口发送: 串口接收: 串口在STM32中的配置: 1. RCC开启USART、串口TX/RX所对应的GPIO口 2. 初始化GPIO口 …...

《汇编语言》第3版 (王爽) 第14章
第14章 端口 检测点14.1 (1).编程,读取CMOS RAM的2号单元的内容。 mov al,2 ;向al写入2 out 70,al ;将2送入端口70h in al,71 ;从端口71h读取2号单元的内容在CMOS RAM中用6个字节存放当前时间(以BCD码形式存放)&…...

Axure原型设计项目效果 全国职业院校技能大赛物联网应用开发赛项项目原型设计题目
目录 前言 一、2022年任务书3效果图 二、2022年任务书5效果图 三、2022年国赛正式赛卷 四、2023年国赛第一套样题 五、2023年国赛第二套样题 六、2023年国赛第三套样题 七、2023年国赛第四套样题 八、2023年国赛第七套样题 九、2023年国赛正式赛题(第八套…...

力扣串题:字符串中的第一个唯一字母
映射做法:将字母转为数字之类的转化必须在运算中实现如-a int firstUniqChar(char * s){int a[26] {0};int len strlen(s);int i;for (i 0; i < len; i)a[s[i] - a];for (i 0; i < len; i) {if (a[s[i] - a] 1)return i;}return -1; }...

【五、接口自动化测试】GET/POST 请求区别
大家好,我是山茶,一个探索AI 测试的程序员 在网上看到了许多关于post与get之间区别的帖子,也有很多帖子是直接粘贴复制的,甚至连标题、符号都没改,甚至还有很多争议 一、post、get 关于post与get之间区别,…...
HDOJ 2036
改革春风吹满地 Problem Description “ 改革春风吹满地, 不会AC没关系; 实在不行回老家, 还有一亩三分地。 谢谢!(乐队奏乐)” 话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也是云里雾…...

2.案例、鼠标时间类型、事件对象参数
案例 注册事件 <!-- //disabled默认情况用户不能点击 --><input type"button" value"我已阅读用户协议(5)" disabled><script>// 分析:// 1.修改标签中的文字内容// 2.定时器// 3.修改标签的disabled属性// 4.清除定时器// …...
OPENCV(0-1之0.0)
OPENCV 第1周:基础知识和安装目标内容 第2-3周:图像处理基础目标内容 第4-5周目标内容 第6-7周目标内容 第8周及以后目标内容 时间安排如下: 第1周:基础知识和安装 目标 了解计算机视觉的基本概念,安装OpenCV&#x…...
如何查询服务器的端口号
要查询服务器上某个服务正在使用的端口号,可以使用几个不同的工具和方法,具体方法取决于你对服务器的访问权限以及具体的操作系统。以下是一些常用的方法: 1. 在Linux系统上 1.1 使用 netstat 命令(需要管理员权限)&…...
AI 产品的 MVP 构建逻辑:Prompt 工程 ≠ 产品工程?
一、引言:技术细节与系统工程的本质分野 在 AI 产品开发的战场中,Prompt 工程与产品工程的边界模糊正在引发深刻的认知革命。当工程师们沉迷于优化 “请用三段式结构分析用户需求” 这类提示词时,产品经理却在思考如何通过用户行为数据验证 …...
解锁 MCP 中的 JSON-RPC:跨平台通信的奥秘
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等希望看什么,评论或者私信告诉我! 文章目录 零、 背景一、RPC vs HTTP1.1 什么是RPC1.2 为什么需要 RPC?1.3 RPC 解决了什么…...

使用web3工具结合fiscobcos网络部署调用智能合约
借助 web3 工具,在 FISCO BCOS 网络上高效部署与调用智能合约,解锁区块链开发新体验。 搭建的区块链网络需要是最新的fiscobcos3.0,最新的才支持web3调用 现在分享踩坑经验,希望大家点赞 目录 1.搭建fiscobcos节点(3.…...

C#中数据绑定的简单例子
数据绑定允许将控件的属性和数据链接起来——控件属性值发生改变,会导致数据跟着自动改变。 数据绑定还可以是双向的——控件属性值发生改变,会导致数据跟着自动改变;数据发生改变,也会导致控件属性值跟着自动改变。 1、数据绑定…...
Screen 连接远程服务器(Ubuntu)
连接 1. 安装screen 默认预安装,可以通过命令查看: screen --version 若未安装: # Ubuntu/Debian sudo apt-get install screen 2. 本机连接远程服务器 ssh root192.168.x.x 在远程服务器中打开screen: screen -S <nam…...

vscode实时预览编辑markdown
vscode实时预览编辑markdown 点击vsode界面,实现快捷键如下: 按下快捷键 CtrlShiftV(Windows/Linux)或 CommandShiftV(Mac)即可在侧边栏打开 Markdown 预览。 效果如下:...

【目标检测】【ICCV 2021】条件式DETR实现快速训练收敛
Conditional DETR for Fast Training Convergence 条件式DETR实现快速训练收敛 代码链接 论文链接 摘要 最近提出的DETR方法将Transformer编码器-解码器架构应用于目标检测领域,并取得了显著性能。本文针对其训练收敛速度慢这一关键问题,提出了一种条…...

如何将通话记录从Android传输到Android
“如何将通话记录从 Android 转移到 Android?我换了一部新的 Android 手机,想要将通话记录复制到其中。”您需要将通话记录从 Android 传输到 Android 是一种常见的情况,因为通话记录是手机上最重要的数据之一。幸运的是,如果您从…...

LabVIEW旋转机械智能监测诊断系统
采用 LabVIEW 开发旋转机械智能监测与故障诊断系统,通过集品牌硬件与先进信号处理技术,实现旋转机械振动信号的实时采集、分析及故障预警。系统突破传统监测手段的局限性,解决了复杂工业环境下信号干扰强、故障特征提取难等问题,为…...