SpringMVC中的常用注解

目录

SpringMVC的定义

SpringMVC的常用注解

获取Cookie和Session


SpringMVC的定义

  Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为SpringMVC。

什么是MVC?

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型视图控制器三个基本部分.

View(视图) 指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.
Model(模型) 是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.
Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型。

MVC 是⼀种架构设计模式, 也⼀种思想, ⽽ Spring MVC 是对 MVC 思想的具体实现. 除此之外, SpringMVC还是⼀个Web框架。
总结来说,Spring MVC 是⼀个实现了 MVC 模式的 Web 框架.


SpringMVC的常用注解

1、 @RequestMapping

用来注册接口的路由映射。如:

@RestController
public class UserController {
// 路由器规则注册
@RequestMapping("/sayHi")
public String sayHi(){return "hello,Spring MVC";}
}

当服务器收到请求时,路径为/sayHi的请求就会调用sayHi这个方法的代码。

@RequestMapping既可修饰类,也可以修饰方法。当修饰类和方法时,访问的地址是类路径+方法路径。

@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息
@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息

如:

@RequestMapping("/user")
@RestController
public class UserController {
@RequestMapping("/sayHi")
public String sayHi(){return "hello,Spring MVC";}
}

访问地址:http://127.0.0.1:8080/user/sayHi

注:@RequestMapping 的URL 路径最前⾯加不加 / (斜杠)都可以, Spring程序启动时, 会进⾏判断, 如果前⾯没有加 / , Spring会拼接上⼀个 /

通常情况下, 我们加上 /

@RequestMapping 既⽀持Get请求, ⼜⽀持Post请求. 同理, 也⽀持其他的请求⽅式。

我们可以显式的指定@RequestMapping 来接收POST的情况,如下所示:

@RestController
public class UserController {@RequestMapping(value = "/getRequest",method= RequestMethod.POST)public String sayHi(){return "get request...";}
}

2、@Controller

加在上,表示这是一个控制类

3、@ResponseBody

支持将返回值放到response内,而不是一个页面,通常用户返回json数据。

4、@RequestBody

允许request的参数在request体中,而不是在直接连接的地址后面。(放在参数前)

@RequestMapping(value = "/m7")
public Object method7(@RequestBody Person person) {return person.toString();
}

  使用postman发送请求:

5、@RestController

该注解为一个组合注解,相当于@Controller@ResponseBody的组合,注解在上,意味着,该Controller的所有方法都默认加上了@ResponseBody。

6、@RequestParam

某些情况下,可能存在前端传递参数和后端接收参数名称不一致的情况,可以使用@RequestParam来重命名前后端的参数。

@RequestMapping("/m4")
public Object method_4(@RequestParam("time") String createtime) {return "接收到参数createtime:" + createtime;
}

注:1、⽤ @RequestParam 进⾏参数重命名时, 请求参数只能和 @RequestParam 声明的名称⼀
致, 才能进⾏参数绑定和赋值.
2. 使⽤ @RequestParam 进⾏参数重命名时, 参数就变成了必传参数。如果要将其设置为非必传参数,要将注解中的required参数设为false.

@RequestMapping("/m4")
public Object method4(@RequestParam(value = "time", required = false) String
createtime) {return "接收到参数createtime:" + createtime;
}

7、@PathVariable

这个注解主要作⽤在请求URL路径上的数据绑定。默认传递参数写在URL上,SpringMVC就可以获取到。

@RequestMapping("/m8/{id}/{name}")
public String method8(@PathVariable Integer id, @PathVariable("name") String
userName){return "解析参数id:"+id+",name:"+userName;
}

注:如果⽅法参数名称和需要绑定的URL中的变量名称⼀致时, 可以简写, 不⽤给@PathVariable的属性赋值, 如上述例⼦中的id变量
如果⽅法参数名称和需要绑定的URL中的变量名称不⼀致时, 需要@PathVariable的属性value赋值,
如上述例⼦中的userName变量.

8、@RequestPart

用于上传文件

@RequestMapping("/m9")
public String getfile(@RequestPart("file") MultipartFile file) throws
IOException {//获取⽂件名称String fileName = file.getOriginalFilename();//⽂件上传到指定路径file.transferTo(new File("D:/temp/" + file.getOriginalFilename()));return "接收到⽂件名称为: "+fileName;
}

获取Cookie和Session

(重点)Cookie和Session的区别:

• Cookie 是客⼾端保存⽤⼾信息的⼀种机制.。Session 是服务器端保存⽤⼾信息的⼀种机制.
• Cookie 和 Session之间主要是通过 SessionId 关联起来的, SessionId 是 Cookie 和 Session 之间的桥梁。
• Cookie 和 Session 经常会在⼀起配合使⽤. 但不是必须配合.
      ◦ 完全可以⽤ Cookie 来保存⼀些数据在客⼾端. 这些数据不⼀定是⽤⼾⾝份信息, 也不⼀定是
SessionId
      ◦ Session 中的sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递, ⽐如通过URL传递. 


 手动设置Cookie的值:

使用注解的方式获取Cookie:

@RequestMapping("/getCookie")
public String cookie(@CookieValue("bite") String bite) {return "bite:" + bite;
}

 使用注解的方式获取Session:

(1)

@RequestMapping("/getSess2")
public String sess2(@SessionAttribute(value = "username",required = false)
String username) {return "username:"+username;
}

(2)通过Spring MVC内置对象HttpSession 来获取: 

@RequestMapping("/getSess3")
public String sess3(HttpSession session) {
String username = (String)session.getAttribute("username");return "username:"+username;
}

以上,关于MVC常用注解,希望对你有所帮助。

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

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

相关文章

百某应JS逆向

https://ying.baichuan-ai.com/ 目录 一、发起提问 二、观察发现有两个加密参数:X-Bc-Sig和X-Bc-Ts ​三、观察JS调用栈 四、从JS中搜索 X-Bc-Sig和X-Bc-Ts 五、断点并分析参数的生成方式 六、分析入参 七、发现关键的o方法调用了一个i()方法 八、验证结果 …

前后端项目打包对比——关于Spring Boot Maven Plugin配置的问题

Spring Boot Maven Plugin 配置详解 Spring Boot Maven Plugin 配置详解1. 添加插件到 pom.xml2. 插件配置2.1 基本配置2.2 配置参数详解默认行为说明简单配置示例为什么这样的配置能工作?进一步说明 2.3 高级配置 3. 使用插件打包应用程序3.1 打包成 JAR 文件3.2 打…

ElasticSearch(六)— 全文检索

一、match系列查询 前面讲到的query中的查询,都是精准查询。可以理解成跟在关系型数据库中的查询类似。match系列的查询,是全文检索的查询。会通过分词进行评分,匹配,再返回搜索结果。 1.1 match 查询 "query": {&qu…

c++笔记4

目录 深度优先搜索DFS DFS的复杂度 DFS与递归 递归与暴力枚举 递归树 DFS与栈 DFS的搜索剪枝 搜索剪枝与优化 可行性剪枝 最优化剪枝 减少等效的分支 优化搜索顺序 搜索的记忆化 搜索的复杂度 大多时候,搜索的复杂度都是指数级的。各种剪枝方案&#…

Flink 技术与应用(一)

Flink技术与应用(初级篇) 起源 Apache Flink 是一个开源的大数据处理框架,其起源可以追溯到一个名为 Stratosphere 的研究项目,旨在建立下一代大数据分析引擎,2010 年,从 Stratosphere 项目中分化出了 Fl…

「Unity3D」场景中的距离单位Unit与相关设置PixelsToUnits、PixelsPerUnit

GameObject在场景的位置Position,并没有明确是什么具体单位——如:Transform的x、y、z,或RectTransform的PosX、PosY、PosZ。而RectTransform在面板上显示的Width和Height,也没有具体单位,其实并不是像素。 事实上&am…

百易云资产管理运营系统 comfileup.php 文件上传致RCE漏洞复现(XVE-2024-18154)

0x01 产品简介 百易云资产管理运营系统,是专门针对企业不动产资产管理和运营需求而设计的一套综合解决方案。该系统能够覆盖资产的全生命周期管理,包括资产的登记、盘点、评估、处置等多个环节,同时提供强大的运营分析功能,帮助企业优化资产配置,提升运营效率。 0x02 漏…

C++内存管理(候捷)第五讲 笔记

GNU C对allocators的描述 new_allocator 和malloc_allocator,它们都没有特别的动作,无非底部调用operator new和malloc。它们没有用内存池 区别:::operator new是可重载的 智能型的allocator,使用内存池,分一大块然后…

【PyTorch】基于YOLO的多目标检测项目(一)

【PyTorch】基于YOLO的多目标检测项目(一) 【PyTorch】基于YOLO的多目标检测项目(二) 目标检测是对图像中的现有目标进行定位和分类的过程。识别的对象在图像中显示有边界框。一般的目标检测方法有两种:基于区域提议的…

如何找到最快解析速度的DNS

如何找到最快解析速度的DNS DNS,即域名系统(Domain Name System),是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使用户更方便地访问互联网,而不用记住能够被机器直接读取的IP数…

6.乳腺癌良性恶性预测(二分类、逻辑回归、PCA降维、SVD奇异值分解)

乳腺癌良性恶性预测 1. 特征工程1.1 特征筛选1.2 特征降维 PCA1.3 SVD奇异值分解 2. 代码2.1 逻辑回归、二分类问题2.2 特征降维 PCA2.3 SVD奇异值分解 1. 特征工程 专业上:30个人特征来自于临床一线专家,每个特征和都有医学内涵;数据上&…

7月25日JavaSE学习笔记

线程的生命周期中,等待是主动的,阻塞是被动的 锁对象 创建锁对象,锁对象同一时间只允许一个线程进入 //创建锁对象Lock locknew ReentrantLock(true);//创建可重入锁 可重入锁:在嵌套代码块中,锁对象一样就可以直接…

进销存系统开发,进销存源码解析,添加商品选择商品

点击添加商品信息(可以) (关键字范围:商品名称,简拼,条形码,SKU,规格,参数,尺寸,接口,CPU,品牌) function cwpd_selSaleGoodsNewMore_Vtax2024(domid,width…

sed利用脚本处理文件

一、sed是什么 sed 命令是利用脚本来处理文本文件。它可以依照脚本的指令来处理、编辑文本文件。主要用来自动编 辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 二、sed的原理 读入新的一行内容到缓存空间; 从指定的操作指令中取出第一条指令&…

【时时三省】(C语言基础)分支语句2

山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 多分支语句 if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3; 如果表达式1成立语句1会执行 如果不成立表达式2执行 如果表达式2成…

【运维笔记】数据库无法启动,数据库炸后备份恢复数据

事情起因 在做docker作业的时候,把卷映射到了宿主机原来的mysql数据库目录上,宿主机原来的mysql版本为8.0,docker容器版本为5.6,导致翻车。 具体操作 备份目录 将/var/lib/mysql备份到~/mysql_backup:cp /var/lib/…

Multiview LM-ICP 配准算法

Multiview LM-ICP 配准算法针对一些大型的物体(比如建筑物)或者需要精细化建模的物体(比如某个文物),仅仅进行成对的配准难以还原物体的全貌和细节。所以,多个视角的配准十分关键。 多视角的配准存在以下两…

[STM32]FlyMcu同时烧写BootLoader和APP文件-HEX文件组成

目录 一、前言 二、HEX文件的格式 三、组合HEX文件 四、使用FlyMcu烧录 一、前言 如题,BootLoader每次烧写都是全部擦除,当我们烧写APP程序的时候,BootLoader程序将不复存在,很多开发者或许只有USB转TTL模块,没有其…

grep命令搜索部分命令

首先 然后可以输入|以及grep命令 比如 bjobs| grep "3075*"bjobs| grep "3075"这个结果是这样的,

MYSQL 第四次作业

任务要求: 具体操作: 新建数据库: mysql> CREATE DATABASE mydb15_indexstu; Query OK, 1 row affected (0.01 sec) mysql> USE mydb15_indexstu; Database changed 新建表: mysql> CREATE TABLE student( ->…