官方文档描述了如果您需要从请求中同时获取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来测试呢?
首先,定义您的数据模型。
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。
单击“发送”按钮,您应该会看到控制台输出每个数据对象的元数据和文件信息。