@RequestPart-同时上传表单数据和文件

  • Post author:
  • Post category:其他


前端接口上传文件的时候,通常会将请求header的content-type设置为:multipart/form-data, 或者form表单提交的时候将enctype设置为”multipart/form-data” 。

后端收到请求时由于请求体有@RequestBody 注解标识,通常会用application/json, application/xml处理content-type,此时会报编码格式的问题。

这时候可以使用@RequestPart参数来接收实体对象,@RequestParam来单个接收参数。

@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。

@RequestParam也同样支持multipart/form-data请求。

@RequestParam和@RequestPart的区别是:@RequestParam适用于name-valueString类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)

@PostMapping("/upload")
public Object upload(@RequestPart(value = "file", required = true) MultipartFile file, @RequestPart  @Validated HlJourney hlJourney) {
    return service.upload(file, hlJourney);
}

使用

postman

上传图片要选择form-data方式

因为是同时传文件和对象,所以是两个参数,同时还要传对象 所以要把右侧Content  Type打开

同时在对象后面添加参数application/json;charset=UTF-8

对象的Value值,要以Json格式传递

前端需要注意:单独给表单对象设置type:”application/json”

formData.append("hlJourney", new Blob([JSON.stringify({"title": "测试标题", "type": 3})], {type: "application/json"}));

主要关键是:把json转成二进制流和文件流一起发送,以及JSON和JavaBean的映射