今天在编写SpringBoot 文件上传遇到这样的错误:org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;bounda
特此记录下:
错误的Controller 代码:
@ApiOperation(httpMethod = "POST", value = "文件块上传")
@RequestMapping(value = "/upload", method = { RequestMethod.POST })
@ResponseBody
public Result upload(
@RequestBody @ApiParam(name = "文件块对象", value = "表单对象")ChunkInfoModel
entity, HttpServletRequest request, HttpServletResponse response) {
UploadFileCallback callback = new UploadFileCallback(entity, "upload", config.getLocation());
Future<Result> result = this.uploadExecutor.submit(callback);
try {
return result.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
log.error(e.getMessage());
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
log.error(e.getMessage());
e.printStackTrace();
}
return Result.ok("文件块上传成功");
}
正确的Controoler 代码:
@ApiOperation(httpMethod = "POST", value = "文件块上传")
@RequestMapping(value = "/upload", method = { RequestMethod.POST })
@ResponseBody
public Result upload(
ChunkInfoModel entity,
HttpServletRequest request, HttpServletResponse response) {
UploadFileCallback callback = new UploadFileCallback(entity, "upload", config.getLocation());
Future<Result> result = this.uploadExecutor.submit(callback);
try {
return result.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
log.error(e.getMessage());
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
log.error(e.getMessage());
e.printStackTrace();
}
return Result.ok("文件块上传成功");
}
原因:首先你在 multipart/form-data 就不能使用 @RequestBody
@RequestBody 的用法:
1. 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
2. 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
springboot 默认配置核心代码,涉及请求request数据转换配置:
总结:RequestBody 支持的请求方式和内容类型
请求方式 |
内容方式 |
支持/不支持 |
POST/GET |
application/x-www-form-urlencoded |
支持@RequestParam、支持@RequestBody |
POST/GET |
multipart/form-data |
不支持@RequestBody |
POST/GET |
application/json、application/xml |
支持@RequestBody |
PUT |
application/x-www-form-urlencoded |
支持@RequestParam、支持@RequestBody |
PUT |
multipart/form-data |
不支持@RequestBody |
PUT |
application/json、application/xml |
支持@RequestBody |