前端接口上传文件的时候,通常会将请求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的映射