【发布时间】:2020-06-26 02:06:57
【问题描述】:
我的要求是,我想获取 json 数据和文件。
用户可以上传文件并将他的数据发送为(例如姓名、电子邮件、图片);
我有一个简单的 DTO,看起来像这样(下)
public class SampleDTO {
private String sample1;
private MultipartFile file;
public String getSample1() {
return sample1;
}
public MultipartFile getFile() {
return file;
}
public void setSample1(String sample1) {
this.sample1 = sample1;
}
public void setFile(MultipartFile file) {
this.file = file;
}
}
我有一个如下所示的示例 API(如下)
@PostMapping("/sampleAPI")
public void sampleAPI(@RequestBody SampleDTO sampleDto) {
log.info("sampleDto"+sampleDto);
log.info("sampleDtoFile"+sampleDto.getFile());
log.info("sampleDtoSample1"+sampleDto.getSample1());
}
如果我调用此 API,则不会打印任何日志,并且会收到此类错误 (Internal server error)。我在这里做错了什么?
我使用 Postman 的 formdata 作为正文,并在 javascript 中使用 new FormData() 作为 API 正文。
【问题讨论】:
-
你试过用@ModelAttribute 代替@Requestbody 吗?
-
或者你也可以尝试存储服务器的路径并从服务器@Vinay获取MultiPartFile
-
@MOnkey 是的!我试过
@ModelAttribute它基本上将每个DTO键转换为@RequestParam。但是如果我在DTO中有大约 25 个键怎么办,所以我的 API url 看起来像这样sampleAPI?sample1=test+sample2..so on。 -
@Vinay Johnwesly ,但你的请求是 POST 请求?
-
@MOnkey 是的,它是 POST 请求,但你建议使用
@ModelAttribute,所以我尝试了,结果是这样的(它将每个 DTO 键转换为参数)
标签: java spring-boot file file-upload