@RequestPart和@RequestParam的应用(不同文件的上传方式)

文章介绍了SpringMVC框架中@RequestPart和@RequestParam注解的用途,@RequestPart用于文件上传,如头像、生活照等,而@RequestParam则用于接收普通参数,如文本信息。文中提供了不同场景的示例,包括单个文件上传、多个文件上传、文件与文本混合上传以及处理同名文件参数的数组接收方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不同文件上传方式:

requestpart和requestparam都是Spring MVC框架中用于接收HTTP请求参数的注解。

requestpart注解用于接收HTTP请求中的文件参数,通常用于文件上传功能。使用该注解时,需要在方法参数中声明MultipartFile类型的参数,Spring MVC框架会自动将上传的文件转换为MultipartFile类型的对象。

requestparam注解用于接收HTTP请求中的普通参数,如表单提交的文本参数。使用该注解时,需要在方法参数中声明与请求参数同名的参数,并可以通过该注解的value属性指定请求参数的名称。如果请求参数与方法参数名称不一致,也可以通过该注解的name属性指定请求参数的名称。

总之,requestpart和requestparam都是Spring MVC框架中用于接收HTTP请求参数的注解,但是requestpart用于接收文件参数,requestparam用于接收普通参数。

场景一:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="http://127.0.0.1:8000/product/minioUpload" method="post" enctype="multipart/form-data">
        头像:<input name="avatar" type="file"><br>
        生活照:<input name="life" type="file"><br>
        工作照:<input name="work" type="file"><br>
        <input type="submit" value="上传">
    </form>
编写Controller层处理请求:
@RestController
@RequestMapping("/product")
public class MinioController {
    @PostMapping("minioUpload1")
    public RetVal minioUpload1(@RequestPart("avatar") MultipartFile avatar,
                              @RequestPart("life") MultipartFile life,
                              @RequestPart("work") MultipartFile work){
        return RetVal.ok();
    }

场景二:

    <form action="http://127.0.0.1:8000/product/minioUpload" method="post" enctype="multipart/form-data">
        头像:<input name="avatar" type="file"><br>
        生活照:<input name="life" type="file" multiple><br>
        <input type="submit" value="上传">
    </form>

使用multiple对于一个文件域,上传多个文件时,后端使用数组去接收处理。

    @PostMapping("minioUpload2")
    public RetVal minioUpload2(@RequestPart("avatar") MultipartFile avatar,
                              @RequestPart("life") MultipartFile[] life){
        return RetVal.ok();
    }

场景三:

上传一个图片和一个文本域

 <form action="http://127.0.0.1:8000/product/minioUpload" method="post" enctype="multipart/form-data">
        头像:<input name="avatar" type="file"><br>
        生活照描述:<input name="lifeInfo" type="text"><br>
        <input type="submit" value="上传">
    </form>

使用@RequestParam(“与前端属性名相同”)获取表单提交的文本参数。

   @PostMapping("minioUpload3")
	    public RetVal minioUpload3(@RequestPart("avatar") MultipartFile avatar,
	                              @RequestParam("lifeInfo") String lifeInfo){
	        return RetVal.ok();

场景四:

上传多个属性名相同的文件。

    <form action="http://127.0.0.1:8000/product/minioUpload" method="post" enctype="multipart/form-data">
        头像:<input name="avatar" type="file"><br>
        生活照:<input name="avatar" type="file"><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>

使用@RequestPart(“文件属性名”) 使用MultipartFile[] 去接收。


    @PostMapping("minioUpload")
    public RetVal minioUpload(@RequestPart("avatar") MultipartFile[] avatar){
        return RetVal.ok();
    }
}
### @RequestPart @RequestBody 注解的区别及用法 #### @RequestBody 注解 `@RequestBody` 方法参数注解表明该方法参数应当通过 `HttpMessageConverters` 将 HTTP 请求体转换为目标类型。通常用于处理表单提交或 RESTful API 的 JSON 或 XML 数据。 ```java @PostMapping("/example") public ResponseEntity<String> handleJsonData(@RequestBody MyObject myObject) { // Process data from request body return new ResponseEntity<>("Success", HttpStatus.OK); } ``` 此注解适用于整个请求主体的内容被解析并映射到指定的对象上[^1]。 #### @RequestPart 注解 相比之下,`@RequestPart` 主要用于多部分 (multipart/form-data) 请求中的文件上传场景以及关联的数据绑定操作。它允许将 multipart 表单数据的一部分作为控制器的方法参数传递给处理器方法。这使得可以更方便地接收来自客户端发送过来的复杂结构化数据,比如图片其他二进制流加上一些额外的信息字段。 ```java @PostMapping("/uploadFileAndMetadata") public ResponseEntity<String> uploadFileWithMetaData( @RequestPart("file") MultipartFile file, @RequestPart("metadata") Metadata metadata) { // Handle uploaded file and associated metadata here... return new ResponseEntity<>("Upload successful!", HttpStatus.CREATED); } ``` 当涉及到文件上传时,`@RequestPart` 是更为合适的选择;而对于简单的 JSON/XML 类型的消息体,则更适合采用 `@RequestBody` 来简化开发工作量[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力奋斗的JAVA小余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值