「JavaEE」Spring MVC:基本操作1

news2024/11/16 18:00:42

🎇个人主页: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 方法,此处省略
    //...
   
    @Override
    public 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.coloradmin.cn/o/1948999.html

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

相关文章

CSS(七)——CSS 列表和CSS Table(表格)

目录 CSS 列表 列表 作为列表项标记的图像 列表 - 简写属性 移除默认设置 所有的CSS列表属性 CSS 表格 表格边框 折叠边框(border-collapse) 表格宽度和高度 表格文字对齐 表格填充 表格颜色 CSS 列表 CSS 列表属性作用如下: 设…

反射型与dom型的xss的区别【源码分析】

反射型 XSS 和 DOM 型 XSS 都属于跨站脚本攻击 (XSS) 的类型,它们的共同点是均能通过注入恶意脚本在用户浏览器中执行,不同点是dom型xss不经过服务器,而反射型是经过服务器的。但是,它们在攻击方式、执行过程和防御措施上有所不同…

基于TensorFlow.js和COCO-SsD模型的实时目标检测网络应用程序

基于TensorFlow.js和COCO-SsD模型的实时目标检测网络应用程序 实现流程 访问用户的桌面录屏并且显示视频源(位置居中)。对视频源进行实时目标检测。在检测到的目标周围绘制边界框,并用它们的类别和检测置信度进行标记。在视频源下方显示一个…

关于SpringBoot项目利用阿里EasyExcel快捷导入Excel文件入库初始化数据的简单实现

一、问题描述 无论新项目还是旧项目,都会出现数据维护、数据初始化等操作,手动录显然很low(领导会骂你),所以一般采用批量导入导出。这里你还在用原始读取excel逐行逐列去读取吗?2024了ok?利用工具是我们cv大师的一贯…

AnyMP4 Data Recovery for Mac v1.5.8免激活版:高效数据恢复新选择

AnyMP4 Data Recovery for Mac是一款专为Mac用户设计的高效数据恢复软件,凭借其强大的功能和简洁的操作界面,为用户提供了快速、安全的数据恢复体验。 该软件支持恢复多种文件类型,包括照片、视频、音频、文档等,无论是常见的图片…

编译Sandboxie源代码

源代码地址: https://github.com/sandboxie-plus/Sandboxie.git 获取下来后,主工程在目录Sandboxie中。 根据官方文档,主要内容有: 安装VS2019 ,必须要有桌面C++开发能力Windows 10 SDK 10.0.19041 必须安装MFC for latest v142 build tools {architecture} 这个组件也需…

Linux中man手册中报No manual entry

在使用man手册的时候会出现这种错误信息: 这种情况是有可能因为没有安装man手册! 只要安装一下man就可以了: yum install man-pages

GLSL教程 第5章:光照和材质

目录 5.1 光照模型基础 5.2 Phong光照模型 5.3 Blinn-Phong光照模型 5.4 Cook-Torrance光照模型 5.5 Lambert光照模型 5.6 材质属性的深入讲解 小结 光照和材质是计算机图形学中至关重要的元素,它们共同决定了渲染图像的视觉效果。光照模型用于模拟光源与物体…

Scrapy 爬取旅游景点相关数据( 二 )

1 安装selenium 借助 selenium 可以使用浏览器来进行爬取数据,可以解决上一节遗留的翻页问题,首先介绍一下如何集成到scrapy环境中。 由于我使用的是macbook,因此以下都是使用macbook安装的过程 ( 网络上很容易找到windows安装…

git实践汇总【配置+日常使用+问题解决】

**最初配置步骤:** git config --global user.name "yournemae" git config --global user.email "yourmail" git config -l ssh-keygen -t rsa -C “xxx.xxxx.EXTcccc.com” git config --global ssh.variant ssh $ git clone git仓库路径 git…

【我的养猪日记】区块链游戏

剧情介绍 年少无知留给了故乡,谦卑有礼送给了远方,有工作的地方没家,有家的地方没工作,他乡留不下灵魂,故乡安不了肉身,从此便有了漂泊。在外漂泊数年的你每天过着,挤不完的公交地铁、交不完的房…

上传项目到GitHub

上传项目到GitHub 前期工作:创建GitHub仓库 1.使用git命令初始化文件夹 git init2.将文件夹里面所有的文件添加到本地仓库,如果想添加单个文件,将.换成文件名就好。 git add .3.给文件备注,双引号里面是文件备注的内容 git c…

架构师篇-14、大型汽车企业之OTD案例分析

本节内容摘要: 1、 通过实际案例从项目背景、战略、业务分析、技术解决方案【应用、数据、技术架构设计】 2、理清问题、识别关键业务或技术、寻求合适的方案 本章节课程交付: 业务理解和分析业务4A架构分析设计案例总结和问题讨论 本节要点&#xff…

VMware 16虚拟机 Linux 挂载U盘(exFAT)

一、环境配置 本机系统:Windows11专业版 软件为:VMware 16 虚拟机系统(镜像文件)为:乌班图 文中U盘格式为下列: exFAT USB 3.0 二、挂载前的准备 1、 首先查看Vmware 软件中的U盘配置 …

使用Apache SeaTunnel进行二次开发的实践分享

大家好,我是范佳,是Apache SeaTunnel社区的PMC member。今天给大家分享一些基于Apache SeaTunnel二次开发的内容。 这部分内容主要涉及代码层面的知识,如果大家有什么疑问,欢迎来社区找我交流! 引言 大部分数据开发工…

谷粒商城实战笔记-62-商品服务-API-品牌管理-OSS整合测试

文章目录 一,Java中上传文件到阿里云OSS1,整合阿里云OSS2,测试上传文件 二,Java中整合阿里云OSS服务指南引言准备工作1. 注册阿里云账号2. 获取Access Key3. 添加依赖 实现OSS客户端1. 初始化OSSClient2. 创建Bucket3. 上传文件4.…

Redis的五种数据类型与命令

目录 引言 一 Redis的特性 二 Redis的安装 三 Redis的优点 四 Redis的五种数据类型与命令 五 Redis的配置文件 引言 Redis是什么? Remote Dictionary Service(远程字典服务器) Redis 是一个开源的(BSD许可)的,C语言编写的,高性能的数…

Windows电脑如何启动RTSP服务实现本地摄像头数据共享

技术背景 提起Windows共享本地摄像头,好多人想到的是通过ffmepg或vlc串流到服务器,实际上,用轻量级RTSP服务更简单,本文就介绍下,如何用大牛直播SDK的Windows轻量级RTSP服务,采集摄像头,生成本…

记录使用el-form的resetFields时遇到的表单数据回显失败的问题,去除nextTick解决

首先简单介绍一下resetFields的基础作用 element-plus官网el-form介绍 本案例中实现点击每行的编辑按钮时,弹出弹窗和表单 由于设置了表单校验,如图,表单内容不符合设定的校验规则时会有提示 如果仅仅这样就会出现问题,下次打…

分布式搜索引擎ES--Elasticsearch集群

1.Elasticsearch集群的概念 分片机制:每个索引都可以被分片 索引my_doc只有一个主分片;索引shop有三个主分片;索引shop2有5个主分片;(参考前面案例) 每个主分片都包含索引的数据,由于目前是单机,所以副分片是没有的&a…