后端使用这样的方式接收图片和一个对象:
@ApiOperation(value = "增加分类")
@PostMapping(value = "/categories")
public Object add(@RequestBody Category category, MultipartFile image, HttpServletRequest request) throws IOException {
saveOrUpdateImageFile(category,image,request);
return categoryService.add(category);
}
前端vue使用ajax发送post请求:
url = ...
var formData = new FormData();
formData.append("image", this.file);
formData.append("name", this.bean.name);
axios.post(url,formData).then(function(response){
...
}
实验过后可以成功上传图片,并且后端也能接收到对象,可是……swagger却无法成功,而是报错:
"timestamp": "2020-04-11T03:48:04.559+0000",
"status": 415,
"error": "Unsupported Media Type",
"message": "Content type 'multipart/form-data;boundary=----WebKitFormBoundaryBwkXzaAxlUNt097V;charset=UTF-8' not supported",
疯狂搜索之后,发现原来是使用了@RequestBody之后,接收的参数对象全都会变为json,而文件明显是二进制文件,所以才会报错,可是吧@RequestBody去掉后,前端又无法用json对象的方式请求了……
所以答案只有两个,要么前端以formData的方式提交,文件能够上传,也能以json对象形式上传对象。要么就直接去掉@RequestBody,以参数形式提交对象(可是如果字段很多的话……所以还是老老实实使用formData吧,至于swagger?呃……如果有其它方式的话,请告诉我!!)