Spring MVC常用功能及注解

news2025/7/15 20:30:21

目录

一、什么是Spring MVC

1.1 Spring MVC定义

1.2 MVC定义

1.3 MVC和Spring MVC的关系

1.4 Spring MVC的作用

二、Spring MVC的使用

2.1 Spring MVC的创建和连接

2.1.1 @RequestMapping注解

2.1.2 @GetMapping注解

2.1.3 @PostMapping注解

2.2 获取参数

2.2.1 获取单个参数

2.2.2 获取多个参数

2.2.3 获取对象

2.2.4 后端参数重命名

2.2.5 设置参数必传

2.2.6 获取JSON格式对象 

2.2.7 获取URL中的参数 

2.2.8 获取上传文件

2.2.9 获取Cookie

2.2.10 存储和获取Session

2.2.11 获取Header

2.3 输出数据

2.3.1 返回静态页面

2.3.2 返回text/html

2.3.3 返回JSON对象

2.3.4 请求转发和请求重定向


一、什么是Spring MVC

1.1 Spring MVC定义

官方对Spring MVC的描述:

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, "Spring Web MVC," comes from the name of its source module (spring-webmvc), but it is more commonly known as "Spring MVC".

总结:Spring MVC全称是Spring Web MVC,是一个基于Servlet的Web框架。

1.2 MVC定义

 MVC是Model View Controller的缩写,它是软件工程中的一种软件架构模式,把软件系统分为模型、视图、控制器三给基本部分。

Model:是应用程序中用于处理应用程序数据分析的部分,它通常负责在数据库中存储数据。 

View:是应用程序中处理数据显示的部分,通常是依据Model创建的。

Controller:是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

1.3 MVC和Spring MVC的关系

MVC是一种思想,而Spring MVC则是它的具体实现(相当于IoC和DI的关系)。

因此,Spring MVC是一个实现了MVC模式,并实现了Servlet API的Web框架。

1.4 Spring MVC的作用

Spring MVC可以帮助开发者快速构建出基于web的应用程序,并且把应用程序的逻辑划分为模型、视图、控制器,从而更方便程序的维护和测试。

二、Spring MVC的使用

2.1 Spring MVC的创建和连接

Spring MVC项目的创建和Spring Boot项目的创建相同,在创建Spring Boot项目时,选择Spring Web依赖,就相当于是创建了Spring MVC项目。

2.1.1 @RequestMapping注解

@RequestMapping用来注册接口的路由映射的,它既可以修饰类,也可以修饰方法,既可以接收Get请求,也可以接收Post请求。

代码示例:

然后使用postman分别发送Get请求和Post请求:

Get请求:

Post请求:

2.1.2 @GetMapping注解

@GetMapping注解修饰的方法,只能接收Get请求。

代码示例:

此时,当我们发送Post请求时,就会出现405状态码:不支持该方法

使用@RequestMapping也可以达到同样的效果:

2.1.3 @PostMapping注解

@PostMapping注解修饰的方法,只能接收Post请求,用法和@GetMapping注解相同。

使用@RequestMapping也可以达到同样的效果:

2.2 获取参数

2.2.1 获取单个参数

在Spring MVC中,可以直接使用方法中的参数来实现用户传参的效果。

代码示例:

使用postman发送请求:

注意:请求中的参数名要和方法的参数名相同,否则无法获取到请求中的参数。

2.2.2 获取多个参数

获取多个参数的方式和获取单个参数的方式相同,使用方法中的形参接收即可。

代码示例:

使用postman发送请求:

注意:请求中的参数如果为基本数据类型,建议方法中使用对应的包装类接收。

如果请求中少传参数时,使用基本数据类型接收就会报错,而使用包装类接收时,包装类的默认值为null,代码不会报错。

2.2.3 获取对象

Spring MVC可以自动实现参数对象的赋值。

代码示例:

使用postman发送请求:

注意:

(1) 请求中的参数名称和要获取的对象中的属性名称相同;

(2) 被获取的对象对应的属性要实现get和set方法(本文中添加了@Data注解)。

2.2.4 后端参数重命名

如果前端传递的参数名为time,而后端接收时的参数名为TIME,前后端参数名不一致时,就会出现参数接收不到的情况,此时就可以使用@RequestParam来重命名后端的参数名。

代码示例:

使用postman发送请求:

2.2.5 设置参数必传

上面的例子中,如果我们在发送请求时不传参数的话,后端getTime方法中的参数TIME应该是默认值null,但实际上我们的代码会报错:

这是因为,在添加@RequestParam注解后,这个参数就变成了必传的参数,我们可以通过更改该注解中required的值来让它变成非必传参数:

再次发送请求时,代码就不会报错了:

2.2.6 获取JSON格式对象 

如果请求中的数据格式为JSON格式,那么可以使用@RequestBody注解来获取数据。

代码示例:

使用postman发送JSON数据格式的请求:

2.2.7 获取URL中的参数 

某些情况下,程序可能要从URL部分获取参数,而不是从query string、请求的body部分获取参数,此时就需要用到@PathVariable注解。

代码示例:

 使用postman发送请求:

注意:使用@PathVariable注解修饰参数后,对应的路由也需要发生变化,对应部分的路由名称要和参数名称一致。

2.2.8 获取上传文件

获取上传文件需要用到@RequestPart注解。

代码示例:

使用postman发送请求:

查看配置文件中设置的本地保存图片的路径:

2.2.9 获取Cookie

方式一:使用Servlet中获取Cookie的方式

Spring MVC是基于Servlet的,所以Servlet中的API在Spring MVC中也是可以使用的~

代码示例:

方式二:使用@CookieValue注解

代码示例:

代码运行结果:

 

2.2.10 存储和获取Session

 方式一:使用Servlet中获取Session的方式

方式二:使用@SessionAttribute注解

required属性的用法和@RequestParam中的required属性用法相同(设置参数必传)。

 

2.2.11 获取Header

方式一:使用Servlet中获取Header的方式

方式二:使用@RequestHeader注解

2.3 输出数据

2.3.1 返回静态页面

默认情况下,Spring MVC返回的就是一个静态页面

代码示例:

前端页面:

2.3.2 返回text/html

使用@ResponseBody或@RestController注解,返回的就是非静态页面

代码示例:

 前端页面:

2.3.3 返回JSON对象

Spring MVC会根据返回的数据自动设置响应中的数据格式~

代码示例:

抓包查看响应中的数据格式:

2.3.4 请求转发和请求重定向

代码示例:

请求转发的前端页面:

请求重定向的前端页面:

 

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

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

相关文章

unbound部署DNS

dns的主要作用是将域名解析为ip地址然后在进行访问 安装配置dns准备3台服务器(地址都要设置为静态的以便自己配置dns)192.168.92.1 用户ip地址(windows) 192.168.92.132 dns服务器地址 192.168.92.133 web服务器地址 dns服务器 …

网络编程之TCP 网络应用程序开发流程

TCP 网络应用程序开发流程学习目标能够知道TCP客户端程序的开发流程1. TCP 网络应用程序开发流程的介绍TCP 网络应用程序开发分为:TCP 客户端程序开发TCP 服务端程序开发说明:客户端程序是指运行在用户设备上的程序 服务端程序是指运行在服务器设备上的程序,专门为客…

【沐风老师】3DMAX橱柜生成器工具使用教程

3DMAX橱柜生成器工具使用教程 【生成的橱柜模型】 3DMAX橱柜生成器(Kitchen Cabinet Creator)用于在3ds Max中自动制作橱柜模型。是需要频繁设计厨房、家具和室内设计的用户的理想工具插件,也是所有希望通过点击几下鼠标来填充一些空白空间的…

游戏服务器算法-AOI九宫格python实现

将空间按照一定的方法进行分割,例如根据AOI范围的大小将整个游戏世界切分为固定大小的格子。当游戏物体位于场景的时候,根据坐标将它放入特定的格子中。 例如玩家1在位置7中,如果游戏内的AOI的范围为1个格子。当我们需要获取这个玩家周围的AO…

第九章 - 多表查询(join,left join 等),合并查询(union union all),子查询

第九章 - 多表查询(join,left join 等),合并查询(union & union all),子查询交叉链接(笛卡尔积)内连接查询外连接查询左链接: left join右链接&#xff1…

python3遍历目录的三种方法浅谈

日期:2023年2月22日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xf…

JavaScript中怎么实现链表?

JavaScript中怎么实现链表? 学习数据结构的的链表和树时,会遇到节点(node)这个词,节点是处理数据结构的链表和树的基础。节点是一种数据元素,包括两个部分:一个是实际需要用到的数据&#xff1b…

MATLAB | 如何用MATLAB绘制这样有气泡感的网络图

今天给大家带来一款用来绘制有气泡感的网络图的工具函数,绘制效果如下: 花里胡哨的,气泡大小代表流入流出数据量综合,不同颜色的气泡代表属于不同类,两个气泡之间有连线代表有数据流动,连线透明度代表流动数…

木鱼cms 审计小结

MuYuCMS基于Thinkphp开发的一套轻量级开源内容管理系统,专注为公司企业、个人站长提供快速建站提供解决方案。‍环境搭建我们利用 phpstudy 来搭建环境,选择 Apache2.4.39 MySQL5.7.26 php5.6.9 ,同时利用 PhpStorm 来实现对项目的调试‍漏洞复现分析‍…

经过深思熟虑后的接口测试自动化的总结与思考

序近期看到阿里云性能测试 PTS 接口测试开启免费公测,本着以和大家交流如何实现高效的接口测试为出发点,本文包含了我在接口测试领域的一些方法和心得,希望大家一起讨论和分享,内容包括但不仅限于:服务端接口测试介绍接…

中央一号文件首提“即时零售”,县域掀起消费业态新风潮

经过几年的探索,即时零售已经逐步走向成熟,并开始向三四线城市以及乡镇城市渗透。 过去一年,京东、美团、阿里争先布局即时零售市场,完善即时配送网络、培养用户消费习惯,即时零售订单迎来了骤增。2022年下半年&#…

【字节面试】Fail-fast知识点相关知识点

字节面试,问到的一个小知识点,这里做一下总结,其实小编之前有一篇文章,已经对此有过涉及,不过这里知识专项针对于问题,把这个知识点拎出来说一下。 1.问题 什么是Fail-fast机制? Hashmap是否拥…

斯坦福大学团队提出AI生成文本检测器DetectGPT,通过文本对数概率的曲率进行可解释判断

原文链接:https://www.techbeat.net/article-info?id4583 作者:seven_ 随着以ChatGPT等大型语言模型(large language models,LLMs)的爆火,学界和工业界目前已经开始重视这些模型的安全性,由于C…

DSP28系列 CCS 开发问题总结及解决办法

文章目录 问题汇总 1. CCS编译器的Project菜单栏工程导入选项丢失,怎么解决! 1.1启动CCS后发现导入工程菜单栏丢失,无法导入工程文件。 1.2方法一 工程选项的导入工程文件丢失,如果要重新获得相应的选项,就需要删除当前…

Java必备小知识点2——输入输出与变量

变量变量的实质假如将内存比喻成一座房子,存入内存就相当于住进房子。但是如果一个房间给了应人,他却不住,那么房间实际上是空着的,又属于个人,别人无法住进来,就会造成浪费。那么将内存比喻成酒店&#xf…

Cocoa-autoLayout

什么是autoLayout autoLayout的重新布局是通过 constraints 各个view实现自动布局,autoLayout重新调整布局view是在runtime中 autolayout without constraints 也就是通过stack view实现不引入复杂的constraints的情况下 还能使用autoLayout 什么是stack view …

SPDK NVMe-oF Target

SPDK NVMe-oF TargetNVMe协议制定了本机高速访问PCIe SSD的规范,相对于SATA、SAS、AHCI等协议,NVMe协议在带宽、延迟、IOps等方面占据了极大的优势,但是在价格上目前相对来讲还是比较贵的。不过不可否认的是,配置PCIe SSD的服务器…

软件供应链受威胁下的应对方法——供应链安全管理平台的五大工具能力

背景如今,软件供应链安全问题已经成为一个全球性的难题。根据数据统计,2017年全球遭受网络攻击的公司比例已经达到了93%,其中很大一部分是由于软件供应链安全问题导致的。而在中国,据统计,2019年全国共发生…

FlinkSQL行级权限解决方案及源码

FlinkSQL的行级权限解决方案及源码,支持面向用户级别的行级数据访问控制,即特定用户只能访问授权过的行,隐藏未授权的行数据。此方案是实时领域Flink的解决方案,类似离线数仓Hive中Ranger Row-level Filter方案。 源码地址: https…

不可变集合、Stream、异常、日志框架

创建不可变集合 什么是不可变集合?不可变集合,就是不可被修改的集合。集合的数据项在创建的时候提供,并且在整个生命周期中都不可改变。否则报错。为什么要创建不可变集合?如果某个数据不能被修改,把它防御性地拷贝到…