我有以下控制器:
@RequestMapping(value="/upload", method=RequestMethod.PUT)
public ResponseEntity<String> handleFileUpload(
@RequestParam("file") MultipartFile file,
@RequestBody Campaign inputCampaign,
Principal principal) {
每当我没有@RequestBody Campaign inputCampaign
这是一个保存用户视频数据的对象时,它就能正常工作,并将上传视频并保存到正确的目录。
但是,我想在1个请求中获取他们上传的文件和与其广告系列相关联的表单数据,以便我可以保存有关其广告系列的相关信息(例如标题,说明等)。
当我尝试使用上面的控制器,并尝试在Postman中发送请求时,我收到以下错误:
"timestamp": 1473349676109,
"status": 415,
"error": "Unsupported Media Type",
"exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
"message": "Content type 'multipart/form-data;boundary=----WebKitFormBoundaryTVc9eDC2a2elulOx;charset=UTF-8' not supported",
"path": "/dashboard/upload"
这是我的邮递员请求设置:
如何在一个请求中发送广告系列表单数据和文件?广告系列对象有很多字段,因此我不想将@RequestParam
放在每个表单字段的控制器参数中。杰克逊应该自动映射属性。
答案 0 :(得分:1)
杰克。
您是否尝试删除这两个注释?
出于演示目的,我做了一个简单的映射,如下所示:
@PutMapping("/file/{fileName}")
@ResponseBody
public String[] postFile(
@PathVariable(name = "fileName") String fileName,
List<MultipartFile> files,
User user
) throws IOException {
return new String[]{
fileName,
user.getUsername(),
files.stream()
.map((f)-> f.getOriginalFilename())
.reduce("", (e, f)->e.concat(f).concat(", "))
};
}
我尝试将少量文件上传到List<MultipartFile> files
。
如图所示,files
和user
数据都是自动映射的,不需要任何注释。
希望它有所帮助。