Spring Boot 同时接受文件和实体及 Postman 测试实战

Spring Boot 文件上传及 Postman 测试指南

在本文中,我们将介绍如何使用 Spring Boot 上传文件并通过 Postman 测试接口。我们会基于以下接口作为示例:

java 复制代码
Boolean importDevicePushConfig(@RequestParam("file") MultipartFile file,DevicePushConfig devicePushConfig);

该接口用于接收一个文件(file)和一个实体对象(devicePushConfig)的参数,其中文件通过请求体中的 form-data 方式上传,实体对象通过 URL 的查询参数传递。


一、Spring Boot 实现文件上传接口

1.1 接口解析

  • @RequestParam("file") MultipartFile file

    Spring 提供的 MultipartFile 是用于接收上传文件的接口。

    通过 @RequestParam 注解指定参数名为 file,映射 HTTP 请求中 form-data 的对应字段。

  • DevicePushConfig devicePushConfig

    这是一个普通的 Java 对象,接收通过 URL 参数传递的值。Spring Boot 会根据参数名和对象的字段名自动进行绑定。


1.2 完整代码示例

1.2.1 DevicePushConfig 实体类
java 复制代码
public class DevicePushConfig {
    @ApiModelProperty("推送系统")
    private String systemCode;
    @ApiModelProperty("设备编码")
    private String deviceCode;
    @ApiModelProperty("设备类型")
    private String deviceType;
    @ApiModelProperty("开始日期")
    @JSONField(format = "yyyy-MM-dd")
    private LocalDate startDate;
    @ApiModelProperty("结束日期")
    @JSONField(format = "yyyy-MM-dd")
    private LocalDate endDate;
}
1.2.2 接口实现
java 复制代码
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

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

    @PostMapping("/importDevicePushConfig")
    public Boolean importDevicePushConfig(@RequestParam("file") MultipartFile file,DevicePushConfig devicePushConfig) {
        // 打印文件信息
        System.out.println("上传的文件名称:" + file.getOriginalFilename());
        System.out.println("文件大小:" + file.getSize() + " 字节");
        // 打印 devicePushConfig 信息
        System.out.println("DevicePushConfig 参数:" + devicePushConfig);
        // 假设文件处理和配置更新成功
        return true;
    }
}

二、Postman 测试接口

2.1 设置请求方法和 URL

  1. 请求方法:POST
  2. 请求 URL:例如 http://localhost:8080/importDevicePushConfig
  3. 请求头:添加 Content-Typemultipart/form-data

2.2 配置 Body(文件)

  1. 在 Postman 中选择 Body 选项卡。
  2. 选择 form-data 方式。
  3. 添加字段:
    • Keyfile(对应 @RequestParam("file") 中的名称)
    • Type :选择 File
    • Value :选择本地文件。

2.3 配置 URL 参数(实体)


2.4 测试结果

点击 Send 发送请求,接口会:

  1. 接收并解析上传的文件,输出文件的名称和大小。
  2. 接收并解析 URL 参数,绑定到 DevicePushConfig 对象。
  3. 返回 true,表示处理成功。

三、接受参数的原理解析

3.1 文件接收:MultipartFile

Spring Boot 使用 MultipartResolver (多部分解析器)处理上传的文件。
MultipartFile 是 Spring 提供的接口,允许我们读取文件的内容和元数据。

工作流程:

  1. 前端通过 multipart/form-data 格式上传文件。
  2. Spring 根据 Content-Type 头部识别请求为多部分请求。
  3. 使用 MultipartResolver 解析请求,将文件数据封装为 MultipartFile 对象。

3.2 URL 参数绑定:实体对象

核心机制:Spring MVC 的数据绑定

  1. Spring 通过反射机制,根据实体类 DevicePushConfig 的字段名匹配查询参数。
  2. 若 URL 中的参数名与实体类字段名一致,Spring 自动调用 setter 方法赋值。
  3. 缺失的参数字段将保留为默认值(通常为 null 或基本类型的默认值)。

3.3 多部分数据的解析

Spring Boot 在接收 multipart/form-data 格式的请求时,会自动识别表单中的字段:

  • 普通字段:绑定到方法的其他参数或实体对象中。
  • 文件字段:绑定到 MultipartFile 对象。

四、总结

通过以上步骤,我们实现了一个文件上传和参数绑定的接口,并使用 Postman 进行了测试。

在实践中,确保以下几点:

  • 文件字段与 @RequestParam 名称保持一致。
  • URL 参数名与实体类字段名一致,才能正确绑定。
  • url数组传参可用
相关推荐
Future_yzx41 分钟前
基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API
spring boot·websocket·文心一言
likesyour1 小时前
Postman 测试 部署在服务器上的接口404问题解决
测试工具·postman
stevewongbuaa1 小时前
一些烦人的go设置 goland
开发语言·后端·golang
花心蝴蝶.4 小时前
Spring MVC 综合案例
java·后端·spring
落霞的思绪5 小时前
Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)
数据库·spring boot·redis·后端·缓存
java冯坚持5 小时前
shiro学习五:使用springboot整合shiro。在前面学习四的基础上,增加shiro的缓存机制,源码讲解:认证缓存、授权缓存。
spring boot·学习·缓存
m0_748255655 小时前
环境安装与配置:全面了解 Go 语言的安装与设置
开发语言·后端·golang
SomeB1oody10 小时前
【Rust自学】14.6. 安装二进制crate
开发语言·后端·rust
患得患失94912 小时前
【Django DRF Apps】【文件上传】【断点上传】从零搭建一个普通文件上传,断点续传的App应用
数据库·后端·django·sqlite·大文件上传·断点上传
customer0812 小时前
【开源免费】基于SpringBoot+Vue.JS校园失物招领系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源