我需要在Java Springboot中创建一个POST端点,它接受MultipartFile(一个原始文件,如xlsx,我们可以从windows资源管理器上传的doc)和JSON Object(元数据)。JSON对象将作为字符串提供,如:
{
"address": "string",
"fullName": "string"
}
我尝试了以下方法:
控制器:
@PostMapping(path = "/post", consumes = {"application/json","multipart/form-data"})
public ResponseEntity<String> endpoint(
@RequestBody ReportDto reportDto,
@RequestPart("myFile") MultipartFile myFile
){
return ResponseEntity.ok(service.process(reportDto,myFile));
}
要在控制器中使用的ReportDto:
public class ReportDto{
String address;
String fullName;
//getters
//setters
//all arg constructor
//no arg constructor
}
当我尝试通过Swagger或POSTMAN访问端点时,我得到HTTP 415:不支持的媒体错误。
我的URL请求看起来像这样:
curl -X 'POST' \
'http://localhost:8080/api/v1/dashboards/post' \
-H 'accept: */*' \
-H 'Authorization: Bearer somebearertoken' \
-H 'Content-Type: multipart/form-data' \
-F 'reportDto={
"address": "string",
"fullName": "string"
}' \
-F 'myFile=@Table_New.xlsx;type=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
请帮我解决这个问题
2条答案
按热度按时间bxjv4tth1#
像这样修改控制器方法:
请注意:如果注解RequestPart中的name属性与参数名称匹配,则不需要该属性。还请注意,使用MediaType中定义的常量有助于避免打字错误/错误。
您还应该将reportDto的媒体类型定义添加到CURL/Postman请求中:
oymdgrw72#
[错误答案]HTTP请求必须有确切的body数据类型,如json,xml,html。所以你不能在http body中放入两种数据。您可以通过url传输参数,通过body传输文件数据。