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

Spring Boot Multipart API在Swagger报错,需支持JSON文本与文件上传

解决Spring Boot Multipart API在Swagger中同时支持JSON输入和文件上传的问题

问题根源是Swagger默认会将@RequestPart绑定的对象类型参数以application/octet-stream的Content-Type提交,而Spring期望该参数是application/json格式,因此抛出HttpMediaTypeNotSupportedException异常。

你可以通过给body参数添加Swagger的@Parameter和@Content注解,明确指定该部分的媒体类型为JSON,同时保留Swagger的JSON文本输入区域,不需要将JSON转为文件上传。

修改后的代码示例

@PostMapping(value = "/myPost", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<MyResult> createPost(
      @RequestPart(value = "body", required = true)
      @Parameter(content = @Content(
          mediaType = MediaType.APPLICATION_JSON_VALUE,
          schema = @Schema(implementation = MyDTO.class)
      ))
      MyDTO myDto,
      @RequestPart(required = false) MultipartFile[] attachments) {
   // 你的业务逻辑代码
}

说明

  • @Parameter(content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE)) 告诉Swagger,body这个表单部分需要以application/json的Content-Type提交,而非默认的二进制流。
  • @Schema(implementation = MyDTO.class) 让Swagger渲染出MyDTO对应的JSON Schema输入框,用户可以直接在Swagger页面输入JSON内容,无需上传文件。
  • 确保你的Swagger依赖(如springdoc-openapi或springfox)为最新稳定版本,旧版本可能存在注解兼容性问题。

这样修改后,Swagger会同时显示JSON文本输入区域和文件上传表单,提交请求时Spring也能正确识别各部分的媒体类型,不会再抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:57