解决Content type ‘multipart/form-data;boundary=----------0467042;charset=UTF-8‘ not supported)的问题
/**
* @author 念兮为美
* @datetime 2022/12/8 16:12
* @desc 文件控制器
*/
@Api(tags = "文件模块")
@RestController
@RequestMapping("/file")
@Slf4j
public class FileController {
@Autowired private FileService fileService;
@Autowired private JwtTokenProvider jwtTokenProvider;
@ApiOperationSupport(author = "念兮为美")
@ApiOperation(value = "文件上传")
@PostMapping("/upload")
@LogAnnotation
public ReturnResult upload(
@RequestHeader(value = REQUEST_HEADER_TOKEN) String token,
@Validated @RequestBody UploadDto uploadDto,
BindingResult bindingResult) {
BindingParamUtil.checkParam(bindingResult);
TokenProperties tokenProperties = jwtTokenProvider.parseToken(token);
ReturnResult upload = fileService.upload(uploadDto, tokenProperties);
return upload;
}
}

2. 分析问题
将上述错误信息翻译成中文不支持'multipart/form-data;boundary=--------------------------036764477110441760467042;charset=UTF-8'请求类型。
为什么不支持这种类型呢?
原来我们在上传文件时,spring框架会自动装配文件类型,使用@RequestBody接收对象,所对应的content-type :application/json。所以当使用@RequestBody和文件上传的时候,会报错。
3. 解决问题
有以下两种解决方案:
删除@RequestBody注解
既然在上传文件时,不能使用@RequestBody,那就删除@RequestBody注解,如下代码所示:
@ApiOperationSupport(author = "念兮为美")
@ApiOperation(value = "文件上传")
@PostMapping("/upload")
@LogAnnotation
public ReturnResult upload(
@RequestHeader(value = REQUEST_HEADER_TOKEN) String token,
@Validated UploadDto uploadDto,
BindingResult bindingResult) {
BindingParamUtil.checkParam(bindingResult);
TokenProperties tokenProperties = jwtTokenProvider.parseToken(token);
ReturnResult upload = fileService.upload(uploadDto, tokenProperties);
return upload;
}
删除@RequestBody注解之后,能够正确地上传文件了。
- 使用
@RequestParam注解
使用@RequestParam注解替换掉@RequestBody注解,如下代码所示:
@ApiOperationSupport(author = "念兮为美")
@ApiOperation(value = "文件上传")
@PostMapping("/upload")
@LogAnnotation
public ReturnResult upload(
@RequestHeader(value = REQUEST_HEADER_TOKEN) String token,
@RequestParam("file") MultipartFile file,
@RequestParam("fileType") String fileType) {
TokenProperties tokenProperties = jwtTokenProvider.parseToken(token);
UploadDto uploadDto = new UploadDto(file, fileType);
ReturnResult upload = fileService.upload(uploadDto, tokenProperties);
return upload;
}
原文链接:https://blog.csdn.net/lvoelife/article/details/128250668

浙公网安备 33010602011771号