全网完美地解决Content type ‘multipart/form-data;boundary=———-0467042;charset=UTF-8‘ not supported)的问题

导读:本篇文章讲解 全网完美地解决Content type ‘multipart/form-data;boundary=———-0467042;charset=UTF-8‘ not supported)的问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. 复现问题

今天在做上传文件的功能,后端代码如下所示:

/**
 * @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;
  }
}

但使用postman测试时,却报出如下错误:

在这里插入图片描述

后端报出的具体错误信息如下所示:

在这里插入图片描述

Content type 'multipart/form-data;boundary=--------------------------036764477110441760467042;charset=UTF-8' not supported的错误。

2. 分析问题

将上述错误信息翻译成中文不支持'multipart/form-data;boundary=--------------------------036764477110441760467042;charset=UTF-8'请求类型

为什么不支持这种类型呢?

原来我们在上传文件时,spring框架会自动装配文件类型,使用@RequestBody接收对象,所对应的content-type :application/json。所以当使用@RequestBody和文件上传的时候,会报错。

3. 解决问题

有以下两种解决方案:

  1. 删除@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注解之后,能够正确地上传文件了。

  1. 使用@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;
}

以上两种解决方案,都重新使用postman测试后,能够正常上传图片,如下图所示:

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99109.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!