如何在 Spring Boot 中的单个请求中发送带有 MultipartFile[] 和元数据的对象列表

问题描述 投票:0回答:1

官方文档描述了如果您需要从请求中同时获取json和多部分数据该怎么做:

@PostMapping("/")
public String handle(@RequestPart("meta-data") MetaData metadata,
        @RequestPart("file-data") MultipartFile file) {
    // ...
}

官方文档描述了如果我需要从请求中同时获取 json 和 multipart 数据该怎么办。但是如果我需要一组这样的对象该怎么办? 我们可以做这样的事情吗:

public record Data(MetaData metadata, List<MultipartFile> files) {}

@PostMapping("/")
public String handle(Set<Data> data) {
    // ...
}

这可能吗?或者也许有某种解决方法? 到底如何使用Postman来测试呢?

spring spring-boot rest servlets http-post
1个回答
0
投票

首先,定义您的数据模型。

public class MetaData {
    private String name;
    private String description;

    // Getters and setters
}

public record Data(MetaData metadata, List<MultipartFile> files) {}

在控制器方法中,使用List来接收多个Data对象。您可以使用@RequestPart注释

@RestController
public class DataController {

    @PostMapping("/")
    public String handle(@RequestPart("data") List<Data> data) {
        // 处理数据
        data.forEach(d -> {
            System.out.println("Metadata: " + d.metadata());
            d.files().forEach(f -> System.out.println("File: " + f.getOriginalFilename()));
        });
        return "Data received successfully";
    }
}

使用 Postman 进行测试

设置请求

请求类型:选择POST。 URL:设置为您的控制器路径,例如 http://localhost:8080/。 标头:添加 Content-Type 标头,设置为 multipart/form-data。

举个典型例子:

假设您有两个 Data 对象,每个对象包含一个 MetaData 和一个文件:
键:data[0].metadata,类型:文本,值:{"name": "example1", "description": "description1"}。 键:data[0].files,类型:文件,值:选择 file1.txt。 键:data[1].metadata,类型:文本,值:{"name": "example2", "description": "description2"}。 键:data[1].files,类型:文件,值:选择 file2.txt。

单击“发送”按钮,您应该会看到控制台输出每个数据对象的元数据和文件信息。

© www.soinside.com 2019 - 2024. All rights reserved.