SpringMVC(4):获取参数,上传文件

SpringMVC(4):获取参数,上传文件

文章目录

1. 从 url 中获取参数

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

获取单个参数

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

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

当你输入资源路径的时候,只要匹配上{}里面的参数,就会把这个参数,赋值给方法变量 article。

真正实现,还需要一个注解:@PathVariable

@PathVariable:路径变量 和字⾯表达的意思⼀样,这个注解主要作⽤在请求URL路径上的数据绑定

当你的URL路径上的数据中的{ }包含的变量名,和使用 @PathVariable注解 修饰的变量名一致,就可以获取到URL路径上的参数。

@PathVariable需要注意的点

  1. 默认情况下@PathVariable 的参数名需要与 URI 模板中的占位符名称一致。
  2. @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' 请求。

主要区别

  1. 请求类型:@RequestParam 适用于简单的 name-value 形式的请求参数,而 @RequestPart 适用于复杂的请求域(如 JSON、XML)。
  2. 数据解析:@RequestParam 依赖于 Converter 或 PropertyEditor 进行数据解析,而 @RequestPart 依赖于 HttpMessageConverters 进行数据解析。
  3. 适用场景:@RequestParam 适用于处理表单数据或 URL 查询参数,而 @RequestPart 适用于处理 multipart/form-data 表单提交请求。

5. 总结

这个博客,你唯一的重点就是:学会如何获取 URL 中的参数的操作即可。

这里我们主要学习了几个新的知识点:

  1. @PathVariable

    @PathVariable:路径变量 和字⾯表达的意思⼀样,这个注解主要作⽤在请求URL路径上的数据绑定

    当你的URL路径上的数据中的{ }包含的变量名,和使用 @PathVariable注解 修饰的变量名一致,就可以获取到URL路径上的参数。

    学会获取单个参数 和 多个参数

  2. MultipartFile 类,getOriginalFilename()方法

    通过请求发送过来的文件,我们使用 MultipartFile 这个类,来进行接收。

    还可以通过,MultipartFile 类实例出来的对象,调用 getOriginalFilename() 方法,来获取到文件的源名字。

  3. transferTo()方法

    可以通过 transferTo()方法,将上传的文件,保存到本地的服务器当中。

  4. @RequestPart( )注解

    上传文件的时候,如果请求的参数和接收的参数名,不一致,可以通过 @RequestPart( )注解,给接收参数进行重命名,匹配请求的参数名。

最后,如果这篇博客能帮到你的,请你点点赞,有写错了,写的不好的,欢迎评论指出,谢谢!

下一篇博客:SpringMVC(5) Cookie和Session

相关推荐
好好沉淀2 小时前
Spring Boot Admin:微服务的“健康体检中心
spring boot·spring·架构·springbootadmin
爱吃山竹的大肚肚2 小时前
异步导出方案
java·spring boot·后端·spring·中间件
晚风_END3 小时前
postgresql数据库|连接池中间件pgbouncer的部署和配置详解
数据库·后端·spring·postgresql·中间件·个人开发
梵得儿SHI3 小时前
(第九篇)Spring AI 核心技术攻坚:安全防护 企业级 AI 应用的风控体系之全链路防护(API 安全到内容合规)
java·人工智能·安全·spring·安全防护·springai·企业级ai
Mr.朱鹏12 小时前
Nginx路由转发案例实战
java·运维·spring boot·nginx·spring·intellij-idea·jetty
代码丰16 小时前
SpringAI+RAG向量库+知识图谱+多模型路由+Docker打造SmartHR智能招聘助手
人工智能·spring·知识图谱
wr20051416 小时前
第二次作业,渗透
java·后端·spring
短剑重铸之日18 小时前
《SpringCloud实用版》 Seata 分布式事务实战:AT / TCC / Saga /XA
后端·spring·spring cloud·seata·分布式事务
短剑重铸之日21 小时前
《SpringCloud实用版》统一认证授权:Spring Authorization Server + OAuth2 + JWT 生产级方案
java·后端·spring·jwt·oauth2