「JavaEE」Spring MVC:基本操作1

🎇个人主页:Ice_Sugar_7
🎇所属专栏:JavaEE
🎇欢迎点赞收藏加关注哦!

简介

Spring Web MVC 是⼀个 Web 框架,简称为 Spring MVC
MVC 是 Model View Controller 的缩写,它是软件工程中一种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分

在这里插入图片描述

学习Spring MVC, 重点是学习如何通过浏览器和用户程序进行交互
交互主要体现在以下三方面:

① 建立连接:将客户端(一般是浏览器)和 Java 程序连接起来,也就是访问一个可以调用我们的 Spring 程序的地址
② 获取请求中的参数:用户的请求中一般带有参数,我们需要在程序中获取到这些参数
③ 返回响应:执行业务逻辑之后,要把程序执行的结果返回给用户,也就是返回响应


建立连接

@RequestMapping 注解

在 Spring MVC 中我们使用注解 @RequestMapping 来实现浏览器与程序的连接

在这里插入图片描述
这个注解既可以修饰类,也可以修饰方法
修饰类时,访问路径为:类路径 + 方法路径
开发时建议路径前面加上 /,并且类路径和方法路径一起使用(虽然类路径可有可无,但为了可读性,最好还是加上)

@RequestMapping 支持 GET 和 POST 请求。同理也支持其他请求方式


参数传递

传递单个参数

@RestController
@RequestMapping("/request")
public class requestDemo1 {@RequestMapping("/req2")public String say1(int age) {return "收到参数,age:"+age;}
}

注意,对于基本类型,写了参数的话就一定要传参,否则会报错。同时参数的类型要匹配

在这里插入图片描述
在这里插入图片描述


传递多个参数&对象

和单个参数同理,注意参数匹配时是按参数名进行匹配的,参数的位置不影响后端获取参数的结果
如果参数比较多时,方法中就有很多形参,并且后续每次新增⼀个参数,也需要修改方法声明。所以不妨把这些参数封装为⼀个对象
Spring MVC 可以自动实现对象参数的赋值,举个例子:

public class Student {private int id;private String name;private int age;//中间是各个参数的 get 和 set 方法,此处省略//...@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}@RestController
@RequestMapping("/request")
public class requestDemo1 {@RequestMapping("/req3")public String classStudent(Student student) {return "收到参数,student:"+student;}
}

在这里插入图片描述

注意传对象时,基本类型的参数,比如 int,可以不传,此时这个参数默认为 0


后端参数重命名

后端接收的参数名可以和前端的不一样,使用 @RequestParam 来重命名前后端的参数值

@RestController
@RequestMapping("/request")
public class requestDemo1 {@RequestMapping("/req4")public String req4(@RequestParam("name") String studentName) {return "收到前端参数 name:" + studentName;}
}

在这里插入图片描述

@RequestParam 修饰的参数默认是必传的,不过可以将 @RequestParam 中的 required 设置为 false,这样就可以不传了。但是注意原先重命名的参数前面要加上 value,之前没加是因为没写 required = false 时,注解属性赋值默认赋给 value,如果有多个属性进行赋值,需要写上 key

@RequestMapping("/req5")
public String req4(@RequestParam(value = "age",required = false) int studentAge) {return "收到前端参数 age:" + studentAge;
}

传递数组&集合

数组元素用逗号分隔

@RequestMapping("/req6")
public String req6(String[] array) {return "数组内容为:" + Arrays.toString(array);
}

在这里插入图片描述
传递集合和数组类似,只不过需要用 @RequestParam 绑定参数关系,除此之外和数组基本没啥区别了

在这里插入图片描述


传递 JSON 数据

JSON 其实就是用字符串来表示 Key-Value 键值对(除了整型和布尔类型),比如下面这些都是合法的 JSON 数据:

{"name":"Sugar","age":20}
["hello", 1234, "json"] [{"name":"lisi","age":18},{"name":"root","age":16},{"name":"张三","age":24}]  

Spring MVC 框架也集成了 JSON 的转换工具,我们可以直接使用,来完成 JSON 字符串和 Java 对象的互转。其实并不复杂,说白了就是,前文传递对象时,我们在前端是 id,name,age 这些成员变量一个一个填,现在使用 JSON 则是一起填,整合到一块(一个 JSON 对象)这样子

在这里插入图片描述

通过 Fiddler 观察一下请求参数:

在这里插入图片描述


获取 URL 中的参数

我们除了可以把参数写在 body 中,还可以写在 URL

@RequestMapping("/req9/{id}/{name}")
public String req9(@PathVariable int id,@PathVariable("name") String studentName) {return "解析参数:id:" + id + " name:" + studentName;
}

在这里插入图片描述

如果方法参数名称和需要绑定的URL中的变量名称⼀致, 那就可以简写, 不用给 @PathVariable 的属性赋值, 如上面例子中的 id 变量;反之如果不一致,那就要给 @PathVariable 中的 value 赋值


上传文件

使用 @RequestPart 注解

//上传文件
@RequestMapping("/req10")
public String req10(@RequestPart("file") MultipartFile file) throws IOException {String fileName = file.getOriginalFilename(); //获取文件名file.transferTo(new File("C:/Users/27196/" + fileName)); //将文件上传至指定路径return "接收到的文件名为:" + fileName;
}

在这里插入图片描述

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

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

相关文章

vscode回退不显示了,不方便操作

一、后退前进按钮 顶部显示&#xff0c;方便调试 <—— ——> 文件-> 首选项 -> 设置->commandcenter->勾选 Window: Title Bar Style->custom 将native —>custom

力扣每日一题1186. 删除一次得到子数组最大和【动态规划】

本题的核心在于对于每个元素&#xff0c;我们分别考虑保留和删除两种状态&#xff0c;并根据前面的状态转移来更新当前状态。最后&#xff0c;遍历所有元素&#xff0c;找到最大和即可。 状态定义 dp[i][0] 表示以第 i 个元素结尾且未删除元素的子数组的最大和。dp[i][1] 表示…

Qemu virtio-blk 后端驱动开发 - PureFlash对接

本文以PureFlash为例&#xff0c;介绍了如何将一个新的存储类型对接到qemu虚拟化平台下&#xff0c;为虚机提供存储能力。 关于virtio-blk以及其工作原理这里就不介绍了&#xff0c;网上有很多分析的文章。总之就是如果我们想给虚机提供一种新的存储类型&#xff08;不同于标准…

【日常记录】【JS】对一个数组,按照某个字段的值,进行分组

文章目录 1. 前言2. lodash 的分组3. Object.groupBy()参考链接 1. 前言 在开发中&#xff0c;经常会遇到一组数据&#xff0c;要按照某个字段进行分组&#xff0c;这个时候会有很多种方法&#xff0c;可以使用 forEach、reduce、等其他方法 reduce 方法 function groupBy(arr…

LLama 405B 技术报告解读

LLama 405B 技术报告解读 果然传的消息都是真的&#xff0c;meta在24号凌晨发布了llama 3的405B版本&#xff0c;这次还是做一个技术报告解读。 值得一提的是&#xff0c;在技术报告的开头&#xff0c;meta特意强调了一个 Managing complexity&#xff0c;大意是管控复杂度。…

主题公园- 海豹主题式风格餐厅设计【AIGC应用】

业务背景&#xff1a;海洋馆针对细分客群增设一个打卡主题点位&#xff0c;以海豹主题式餐厅为打卡卖点&#xff0c;效果参见海豹主题式风格。 AIGC概念图制作平台&#xff1a;&#xff08;可灵&#xff09; https://klingai.kuaishou.com/ 关键词&#xff1a; 海豹主题餐厅…

Blender插入关键帧的位置报错

在操作过程中&#xff0c;有时候是误操作或者是做动画选择了活动插帧集&#xff0c;导致按i键插入关键帧一直报提示&#xff1a;插入关键帧的帧位置或者是其他的报错弹窗。 1、解决方法是&#xff1a;在时间线的抠像(插帧)选项里&#xff0c;将活动插帧集给清空 2、若是骨骼动画…

Ubuntu 修改源地址

注意事项&#xff1a;版本说明&#xff01;&#xff01;&#xff01; Ubuntu24.04的源地址配置文件发生改变。 不再使用以前的 sources.list 文件&#xff0c;该文件内容变成了一行注释&#xff1a; # Ubuntu sources have moved to /etc/apt/sources.list.d/ubuntu.sources…

操作系统面试知识点总结2

#来自ウルトラマンメビウス&#xff08;梦比优斯&#xff09; 1 进程与线程 1.1 进程的概念和特征 更好地描述和控制程序并发执行&#xff0c;实现操作系统的并发性和共享性。 进程控制块&#xff08;PCB&#xff09;&#xff1a;更好的描述进程的基本情况和运行状态&#xff…

Eclipse 搭建 C/C++ 开发环境以及eclipse的使用

一、下载、安装 MinGW 1、下载: 下载地址&#xff1a;MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.net 点击“Download Latest Version”即可 下载完成后&#xff0c;得到一个名为 mingw-get-setup.exe 的安装文件。双击运行&#xff0c;安装即可。 …

大数据、区块链与人工智能

大数据、区块链与人工智能&#xff1a;技术融合与未来展望 摘要 本文旨在探讨大数据、区块链和人工智能这三个技术领域的基本概念、发展历程、应用场景及其相互之间的融合。文章首先分别介绍这三个技术的定义和特点&#xff0c;然后分析它们在不同行业中的实际应用&#xff0…

Llama 3.1发布,性能媲美最强闭源大模型

美国太平洋时间 7 月 23 日&#xff0c;Meta 公司发布了其最新的 AI 模型 Llama 3.1&#xff0c;这是一个里程碑时刻。Llama 3.1 的发布让我们看到了开源 LLM 有与闭源 LLM 一较高下的能力。 Meta 表示&#xff0c;“到目前为止&#xff0c;开源 LLM 在功能和性能方面大多落后于…

C++高性能通信:了解Iceoryx与零拷贝技术的实现与应用

文章目录 0. 引言1. Iceoryx使用到的零拷贝技术1.1 零拷贝技术概述1.2 零拷贝的优势1.3 Iceoryx零拷贝的实现1.4 信息轮询与信号触发 2. Iceoryx的核心概念3. Iceoryx使用示例3.1 发布者程序3.2 订阅者程序3.3 编译和运行3.4 压力测试脚本 4. 参考文章 0. 引言 Iceoryx是一个开…

星环科技携手东华软件推出一表通报送联合解决方案

随着国家金融监督管理总局“一表通”试点工作的持续推进&#xff0c;星环科技携手东华软件推出了基于星环科技分布式分析型数据库ArgoDB和大数据基础平台TDH的一表通报送联合解决方案&#xff0c;并已在多地实施落地中得到充分验证。 星环科技与东华软件作为战略合作伙伴&…

深度学习复盘与论文复现E

文章目录 一、项目复现的问题及其解决方案1、 Cannot find DGL C graphbolt library2、 “is“ with a literal. Did you mean ““?”3、运行SEG、SPG查看GATNet的网络结构4、关于LI-FPN项目找不到数据粒度不匹配问题5、关于LI-FPN项目num_samples为空6、解决路径问题7、 !ss…

Java | Leetcode Java题解之第273题整数转换英文表示

题目&#xff1a; 题解&#xff1a; class Solution {String[] singles {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};String[] t…

PHP基础语法(四)

一、字符串类型 1、字符串定义语法 1&#xff09;单引号字符串&#xff1a;在单引号内部&#xff0c;所有的字符都会按照字面意义解释&#xff0c;不会进行变量替换或转义处理&#xff0c;除了 \ 表示单引号本身。 $str1 Hello, World!;2&#xff09;双引号字符串&#xff…

数据库——单表查询

一、建立数据库mydb8_worker mysql> use mydb8_worker; 二、建立表 1.创建表 mysql> create table t_worker(department_id int(11) not null comment 部门号,-> worder_id int(11) primary key not null comment 职工号,-> worker_date date not null comment…

qt SQLite学习记录

1. 查看qt中数据库的驱动的类型的支持 QStringList drivers QSqlDatabase::drivers();//获取qt中所支持的数据库驱动类型foreach(QString driver,drivers){qDebug()<<driver;}2. Qt SQL 模块包含的主要类的功能介绍 Qt SQL 模块包含了一些主要的类&#xff0c;用于在 …

传输层协议——TCP

TCP协议 TCP全称为“传输控制协议”&#xff0c;要对数据的传输进行一个详细的控制。 特点 面向连接的可靠性字节流 TCP的协议段格式 源/目的端口&#xff1a;表示数据从哪个进程来&#xff0c;到哪个进程4位首部长度&#xff1a;表示该TCP头部有多少字节&#xff08;注意它…