springmvc 上传文件并且带参数

直接上代码

    @RequestMapping(value = RestUrl.upload, method = RequestMethod.POST)
    @ResponseBody
    public ResultDTO<FilePathDTO> upload(@RequestParam(value = "file", required = true) MultipartFile file,@RequestParam(value=CommConstants.POST_JSON_DATA) String json) throws Exception{
        UploadFileParam param = JSON.parseObject(json, UploadFileParam.class);
        return commonService.upload(file,param);
    }

目前已经实现了请求后用requestparam接收参数
请求地址:http://localhost/server/sc/common/upload?postdata={shopId:100001,purpose:"commodity",type:"img"}

但是我想通过requestbody接收
请求地址:http://localhost/server/sc/common/upload body:{shopId:100001,purpose:"commodity",type:"img"}

后台:

    @RequestMapping(value = RestUrl.upload, method = RequestMethod.POST)
    @ResponseBody
    public ResultDTO<FilePathDTO> upload(@RequestParam(value = "file", required = true) MultipartFile file,@Requestbody UploadFileParam param) throws Exception{
        return commonService.upload(file,param);
    }

会出现415错误~~~貌似spring controller里 参数不能同时存在@requestparam和@requestbody

我比较想都通过requestbody进行操作,body里传的参数不受限制小大,并且安全。

或者能改成这样也可以

    @RequestMapping(value = RestUrl.upload, method = RequestMethod.POST)
    @ResponseBody
    public ResultDTO<FilePathDTO> upload(@Requestbody UploadFileParam param) throws Exception{
 //param里可以取到文件
        return commonService.upload(param);
    }

求详细可靠的解答~~

阅读 20.4k
4 个回答

不确定是否理解题主的意思

使用你提到的这种方式 是完全没有问题的啊

@RequestMapping(value = RestUrl.upload, method = RequestMethod.POST)
    @ResponseBody
    public ResultDTO<FilePathDTO> upload(@Requestbody UploadFileParam param) throws Exception{
 //param里可以取到文件
        return commonService.upload(file,param);
    }

此时候你的vo的格式如下即可

public class UploadFileParam {
    private long shopId;
    private String purpose;
    private String type;
    private MultipartFile file; 

    // getter setter
}

前提是你用form表单的形式进行提交,据我所知json似乎是没有表达内嵌文件的格式的。

所以我推荐前端使用form表单提交这几个字段,后端使用你最后的方案就可以实现。

新手上路,请多包涵

楼主,有没有完美一点解决方案了呢?

新手上路,请多包涵

楼主使用requestBody的方式可以了吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进