springboot+vue+swagger上传图片时遇到的坑

后端使用这样的方式接收图片和一个对象:

    @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?呃……如果有其它方式的话,请告诉我!!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值