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

Spring Boot REST API文件上传问题:@RestController接口请求失败排查

问题根源与解决方案

嘿,这问题我熟——你犯了Spring Boot接口开发里一个很常见的错误:同时混用@RequestBody和文件上传的请求参数,这俩根本不兼容!

为什么会出问题?

@RequestBody是告诉Spring把整个请求体解析成application/json格式的对象;而文件上传的请求必须用multipart/form-data格式,Spring会把请求体拆分成多个独立部分处理。这两种请求格式完全冲突,Spring没法同时解析,所以Postman请求必然失败。

正确的解决办法

给你两种常用方案,按需选择:

方案1:用@ModelAttribute接收UserInfo(适合简单用户信息)

把@RequestBody换成@ModelAttribute,让Spring从form-data的表单字段自动组装UserInfo对象:

@RequestMapping(value = "/register", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public AppResponse registerUserFromApp(
    @ModelAttribute UserInfo userInfo,
    @RequestParam(value = "file", required = false) CommonsMultipartFile file,
    @RequestParam(value = "inviteCode", required = false) String inviteCode) {
    // 你的业务逻辑代码
}

Postman配置方式:

  • 请求方式选POST,地址填/register
  • Body选form-data
  • 添加表单项:
    • 把UserInfo的每个字段(比如username、password)作为单独的键,类型选Text,填入对应值
    • 键file,类型选File,上传目标文件
    • 键inviteCode,类型选Text,填入邀请码(可选)

方案2:用@RequestPart同时接收JSON对象和文件(适合复杂UserInfo)

如果UserInfo结构复杂,不想拆成单个字段,可以用@RequestPart分别接收multipart里的不同部分:

@RequestMapping(value = "/register", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public AppResponse registerUserFromApp(
    @RequestPart("userInfo") UserInfo userInfo,
    @RequestPart(value = "file", required = false) CommonsMultipartFile file,
    @RequestParam(value = "inviteCode", required = false) String inviteCode) {
    // 你的业务逻辑代码
}

Postman配置方式:

  • 请求方式选POST,地址填/register
  • Body选form-data
  • 添加表单项:
    • 键userInfo,类型选Text,填入UserInfo的完整JSON字符串(比如{"username":"shubham","email":"xx@xx.com"})
    • 键file,类型选File,上传目标文件
    • 键inviteCode,类型选Text,填入邀请码(可选)

额外注意点

  • 确保UserInfo类有正确的getter和setter方法,Spring需要通过这些方法组装对象
  • Spring Boot默认已开启multipart文件上传支持,无需额外配置(极老版本可在application.properties中添加spring.servlet.multipart.enabled=true)

内容的提问来源于stack exchange,提问作者Shubham A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:16:17