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

Spring应用如何接收包含JSON对象与附件的multipart请求

问题原因

你之前的代码无法运行是因为@RequestBody仅支持接收application/json类型的请求体,而文件上传需要使用multipart/form-data请求类型,两种请求格式互斥,无法在同一个接口中同时使用。

解决方案

使用@RequestPart注解替代@RequestBody接收JSON对象,同时指定接口接收multipart/form-data类型的请求:

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Validated;
// 其余依赖根据你自己的项目补充即可

@PutMapping(value = "/{id}/update", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public void updateCar(@PathVariable(value = "id") Long carId, 
                      @Validated @RequestPart("car") Car car, 
                      @RequestPart("file") MultipartFile file) throws ResourceNotFoundException, IOException {
    // 这里可以正常获取car对象和上传的file文件
}

注意:如果使用传统Spring MVC而非Spring Boot,需要额外在配置类中注册Multipart解析器:

@Bean
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();
    resolver.setMaxUploadSize(10*1024*1024); // 可自定义最大上传大小,这里是10MB
    return resolver;
}

Postman测试方法

  • 选择请求方式为PUT,输入对应的接口地址
  • 切换到Body标签,选择form-data格式
  • 新增第一条参数:key填car,鼠标hover在key输入框右侧,下拉选择类型为JSON,值填写符合Car结构的JSON字符串
  • 新增第二条参数:key填file,下拉选择类型为File,点击值输入框选择本地要上传的文件
  • 发送请求即可正常调用

报错截图

报错截图1
报错截图2


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:06:00