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
相关产品推荐
相关产品推荐

