详细分析SpringMVC中的@RequestPart注解基本知识

前言

基本的Java知识推荐阅读:

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. 【Java项目】实战CRUD的功能整理(持续更新)

1. 基本知识

@RequestPart 注解主要用于在 Spring Boot 中接收 HTTP 请求中的"部分"数据,通常在处理多部分请求(如文件上传)时使用

@RequestBody 不同,@RequestPart 适用于 multipart/form-data 类型的请求,而 @RequestBody 通常用于 application/json 类型的请求

  • 适用场景:用于处理多部分请求,如文件上传或表单数据混合 JSON
  • 注解目标:可以用在方法参数上,帮助 Spring MVC 自动绑定 multipart 表单数据到方法参数
  • 常见用途:文件上传、混合文本和文件的数据处理
  • 依赖配置:需确保配置了 MultipartResolver,一般情况下 Spring Boot 默认配置了 StandardServletMultipartResolver,无需额外设置

@RequestPart 与 @RequestBody 的具体差异

特性 @RequestPart @RequestBody
请求类型 主要用于 multipart/form-data 主要用于 application/json
适用数据类型 文件、JSON、表单数据等 适用于 JSON 数据
绑定方式 可绑定到文件、基本数据类型和 POJO 绑定到 JSON 对象并直接映射成 POJO
用途 文件 上传和多部分数据 常规的 JSON 数据绑定
常用场景 文件和元数据混合处理 JSON 请求体的数据
多参数支持 适合处理多种类型参数混合 通常用于单一的 JSON 对象
Postman 支持 需要选择 form-data,每部分对应 key 名 直接以 raw 格式发送 JSON 数据
  1. 使用 @RequestPart
    选择 form-data 作为请求体类型
    每一个字段(包括文件)都作为独立的“键值对”发送,文件部分需将类型设置为 File
    支持文件与文本混合的数据提交

  2. 使用 @RequestBody
    选择 raw 格式的请求体类型,并选择 JSON
    直接发送 JSON 格式的数据

2. Demo

基本的示例Demo如下:

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.http.ResponseEntity;

@RestController
@RequestMapping("/upload")
public class FileUploadController {
    
    

    // 上传接口,接收文件和JSON数据
    @PostMapping("/file")
    public ResponseEntity<String> handleFileUpload(
            @RequestPart("file") MultipartFile file,               // 接收文件
            @RequestPart("metadata") UploadMetadata metadata       // 接收JSON数据
    ) {
    
    
        // 处理文件和元数据
        String fileName = file.getOriginalFilename();
        String description = metadata.getDescription();
        
        // 文件处理逻辑
        // JSON 数据处理逻辑
        return ResponseEntity.ok("文件上传成功,文件名:" + fileName + ",描述:" + description);
    }

    // 数据类,用于接收JSON数据
    public static class UploadMetadata {
    
    
        private String description;

        // Getters and Setters
        public String getDescription() {
    
    
            return description;
        }

        public void setDescription(String description) {
    
    
            this.description = description;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_47872288/article/details/143477009