You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot REST Controller如何同时传MultiPartFile与JSON?遇415错误

问题分析与解决方案

你遇到的415(Unsupported Media Type)错误,核心原因是请求媒体类型与接口参数注解不匹配:

  • 当同时传递文件和JSON数据时,实际请求的Content-Type是multipart/form-data,但你混用了@RequestBody(期望纯JSON请求体)和@RequestPart,且consumes中同时声明了两种不兼容的媒体类型,导致Spring无法正确解析请求。

修复步骤

  1. 替换@RequestBody为@RequestPart:@RequestPart专门用于处理multipart/form-data请求中的各个部分,支持解析JSON格式的表单项。
  2. 调整consumes配置:只保留MediaType.MULTIPART_FORM_DATA_VALUE,因为整个请求是多部分表单类型,无需单独声明JSON类型。

修改后的代码

@ResponseStatus(value = HttpStatus.CREATED)
@PostMapping(value = "/file/new", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<DefaultResponseDto<Object>> createFile(HttpServletRequest servletRequest,
                                                             @RequestPart @Valid PortfolioFileSaveRequestDto request,
                                                             @RequestPart MultipartFile file) {
    List<String> tokenInfo = jwtProvider.authorizeJwt(servletRequest.getHeader(AUTHORIZATION));

    // ... 原有业务逻辑代码

    Portfolio portfolio = portfolioService.saveFile(request, user.getUsername(), profile, file);

    // ... 原有业务逻辑代码
}

请求构造说明

以Postman为例,构造请求时需注意:

  • 请求方法选择POST,地址填写/file/new
  • Body选择form-data类型
  • 添加两个表单项:
    • 第一个项的Key为request,类型选Text,格式切换为JSON,粘贴你的请求体内容
    • 第二个项的Key为file,类型选File,选择要上传的文件

额外注意事项

  • 确保PortfolioFileSaveRequestDto类具备正确的Getter/Setter方法(或使用Lombok的@Data注解),保证Jackson能正常解析JSON
  • 如果请求中表单项的名称与参数名不一致,可通过@RequestPart("自定义名称")指定映射关系

内容的提问来源于stack exchange,提问作者gs97ahn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:55:58