SpringMVC(4):获取参数,上传文件
文章目录
- SpringMVC(4):获取参数,上传文件
- [1. 从 url 中获取参数](#1. 从 url 中获取参数)
-
- 获取单个参数
- 获取多个参数
- 修改成非必传参数
-
- 获取多个参数时,注意的点:
-
- [1. 变量名相对应](#1. 变量名相对应)
- [2. 定义顺序可以不一致](#2. 定义顺序可以不一致)
- [3. 资源路径要对应](#3. 资源路径要对应)
- [4. 要有匹配的资源路径](#4. 要有匹配的资源路径)
- [5. 不建议方法参数同类型](#5. 不建议方法参数同类型)
- [6. 可以重命名](#6. 可以重命名)
- [2. 上传文件](#2. 上传文件)
-
- [1. 示例:上传图片](#1. 示例:上传图片)
-
- 代码:
-
- [使用 postman 上传文件:](#使用 postman 上传文件:)
- [2. 可以对上传的文件,进行操作](#2. 可以对上传的文件,进行操作)
- [3. 接收文件的参数重命名](#3. 接收文件的参数重命名)
- [3. 路径参数和请求参数](#3. 路径参数和请求参数)
- [4. @RequestPart( )注解 和 @RequestParam()注解的区别](#4. @RequestPart( )注解 和 @RequestParam()注解的区别)
-
- [@RequestPart( )注解](#@RequestPart( )注解)
- [@RequestParam( )注解](#@RequestParam( )注解)
- 主要区别
- [5. 总结](#5. 总结)
1. 从 url 中获取参数

这是从今日头条上,获取到的网页 url,当我想获取到网页的url中的文章标识,也就是参数的时候,该怎么做?
获取单个参数

需要在建立资源路径的时候,定义 articleID。

用{},表示你要获取的参数。

当你输入资源路径的时候,只要匹配上{}里面的参数,就会把这个参数,赋值给方法变量 article。
真正实现,还需要一个注解:@PathVariable
@PathVariable:路径变量 和字⾯表达的意思⼀样,这个注解主要作⽤在请求URL路径上的数据绑定
当你的URL路径上的数据中的{ }包含的变量名,和使用 @PathVariable注解 修饰的变量名一致,就可以获取到URL路径上的参数。
@PathVariable需要注意的点
- 默认情况下 ,
@PathVariable的参数名需要与 URI 模板中的占位符名称一致。 @PathVariable默认是必填 的。可以通过修改取消默认必填(required = false)

获取多个参数
获取多个参数,需要在 资源路径中,再定义一个变量
在方法参数那里,再定义一个参数,和 资源路径 中那个变量,对应起来

使用Postman发送请求:http://127.0.0.1:8080/request/article/博客/12345

修改成非必传参数
如果你不想在网址中传入某一个参数并获取它,可以这么做:
java
@PathVariable(value = "articleID",required = false)
但是,不建议这么做吧,还是要规范。
网址传入参数还是得传。
获取多个参数时,注意的点:
1. 变量名相对应
这里的参数,在方法参数处,定义变量名的时候,一定要和url路径中绑定的数据名({}里面的变量名)相对应!!!

2. 定义顺序可以不一致
对于 方法参数的定义顺序 ,和url路径中绑定的数据({}里面的变量 ),不要求一致 !!!

3. 资源路径要对应
输入资源路径的时候,要和 定义 的资源路径对应上才行

4. 要有匹配的资源路径
当我们的资源路径,有两个需要获取的参数时:

我们输入的 URL 中,必须要有与之对应的值。
也就是说:URL 中 (XXX/article/ ) article 之后,必须要有两个值,才能匹配,否则找不到资源。
就好比说,输入的网址输错了,也是资源不存在(状态码:404)

5. 不建议方法参数同类型
当方法参数的多个参数的类型,都是一样的时候,可读性不高

6. 可以重命名
当你不想让方法参数的变量名和绑定数据的名字一样的时候,我们可以在 @PathVariable 注解括号中,定义URL路径上的绑定的数据名:

重命名后,资源路径中被绑定的数据,根据方法参数前重命名的名字,进行匹配。
2. 上传文件
在开发时,上传文件这个需求,是一个非常常见的业务。
通过请求发送过来的文件,我们使用 MultipartFile 这个类,来进行接收。
这个单词的意思是:多部分文件。 也就是可以用这个类,来接收多种文件,如:文本,视频,图片...
1. 示例:上传图片
代码:

使用 postman 上传文件:


运行结果:

2. 可以对上传的文件,进行操作
读取文件(按照字节方式进行读取)

直接上传本地电脑
这里需要使用一个新的方法:transferTo()方法,使用的时候,需要new一个新的 File对象,然后填写你要存放的路径,注意路径的写法:D:\MuMuPlayer-12.0\ 最后的 ' \ ' ,是让文件保存到当前文件夹里面。
然后加上文件名 :file.getOriginalFilename()
效果:

transferTo()方法 做的事情,是对文件复制操作的一个封装。
3. 接收文件的参数重命名

这里参数名不匹配,可以使用重命名的方式。
这里需要用一个新的注解:@RequestPart( ),括号里面,填写一个和发送方相同的参数名。
效果:

3. 路径参数和请求参数

对于请求参数和路径参数,不用纠结
重点是要学会获取参数即可。
4. @RequestPart( )注解 和 @RequestParam()注解的区别
都是可以用于重命名的,但是,这两个注解,有什么区别?
@RequestPart( )注解
@RequestPart 注解用于处理 multipart/form-data 表单提交请求的方法上。它适用于复杂的请求域(如 JSON、XML) ,并且支持 MultipartFile(文件) 类型的请求参数。
@RequestParam( )注解
@RequestParam 注解用于将请求参数绑定到方法参数上。它适用于简单的 name-value 形式的请求参数,通常用于处理表单数据或 URL 查询参数。@RequestParam 支持 'application/json' 和 'multipart/form-data' 请求。
主要区别
- 请求类型:@RequestParam 适用于简单的 name-value 形式的请求参数,而 @RequestPart 适用于复杂的请求域(如 JSON、XML)。
- 数据解析:@RequestParam 依赖于 Converter 或 PropertyEditor 进行数据解析,而 @RequestPart 依赖于 HttpMessageConverters 进行数据解析。
- 适用场景:@RequestParam 适用于处理表单数据或 URL 查询参数,而 @RequestPart 适用于处理 multipart/form-data 表单提交请求。
5. 总结
这个博客,你唯一的重点就是:学会如何获取 URL 中的参数的操作即可。
这里我们主要学习了几个新的知识点:
-
@PathVariable
@PathVariable:路径变量 和字⾯表达的意思⼀样,这个注解主要作⽤在请求URL路径上的数据绑定
当你的URL路径上的数据中的{ }包含的变量名,和使用 @PathVariable注解 修饰的变量名一致,就可以获取到URL路径上的参数。
学会获取单个参数 和 多个参数
-
MultipartFile 类,getOriginalFilename()方法
通过请求发送过来的文件,我们使用 MultipartFile 这个类,来进行接收。
还可以通过,MultipartFile 类实例出来的对象,调用 getOriginalFilename() 方法,来获取到文件的源名字。
-
transferTo()方法
可以通过 transferTo()方法,将上传的文件,保存到本地的服务器当中。
-
@RequestPart( )注解
上传文件的时候,如果请求的参数和接收的参数名,不一致,可以通过 @RequestPart( )注解,给接收参数进行重命名,匹配请求的参数名。
最后,如果这篇博客能帮到你的,请你点点赞,有写错了,写的不好的,欢迎评论指出,谢谢!