MultipartFile与@requestbody一起时HTTP报错,"status": 415, "error": "Unsupported Media Type",

【例】比如下面例子,新增用户同时上传文件并持久化。

【代码】

controller接口定义:

public Response<Integer> saveTemplate(@RequestBody SignatureTemplateResource templateResource,
                                      MultipartFile file) {}

测试时发现swagger 的content type显示:

执行报错:

{ "timestamp": "2019-01-03T09:27:45.533+0000", "status": 415, "error": "Unsupported Media Type", "message": "Content type 'multipart/form-data;boundary=----WebKitFormBoundaryNq8sxBAWWDbNj1Bm;charset=UTF-8' not supported", "path": "/ms/api/v1/sc/signaturetemplate/save" }

 

【解决方案】:入参去掉@requestBody注解即可。

public Response<Integer> saveTemplate(SignatureTemplateResource templateResource,
                                      MultipartFile file) {}

【根本原因】首先了解下http Content-type的各种值的含义: https://blog.youkuaiyun.com/shinebar/article/details/54408020

这里的content-type的媒体类型为:multipart/form-data ,表示表单中进行文件上传。个人感觉是由于参数中的MultipartFile类型影响了requestbody本应所对应的content-type: application/json,感觉可能是MultipartFile的媒体类型优先级高,会覆盖application/json。

 

******各位了解真相的大佬发表一下*****

 

 

 

我的方法 @PostMapping("/compares") public R compares(@RequestParam("File") MultipartFile file, @RequestBody String jsonContent){ //读取PDF文本 String pdfText = compareService.extractContent(file); // 2. 解析JSON配置 JsonNode jsonConfig = null; try { jsonConfig = compareService.parseJson(jsonContent); } catch (Exception e) { return R.fail(MessageUtils.message("failed.convert.json")); } //执行对比校验 List<ValidationResult> results = compareService.compareContent(pdfText, jsonConfig); //返回没有匹配成功的数据 List<ValidationResult> failedResults = new ArrayList<>(); for (ValidationResult result : results) { if (!result.isValid()) { failedResults.add(result); } } if (failedResults.isEmpty()) { return R.ok("条件符合规范"); } else { return R.ok(failedResults); } } 我在我的idea里面测试apifox我这个接口 在boby里面 form-data 写了俩个 File是上传文件 还有一个是我的json我是text [ { "DELIVERYNO": "QBA7074052", "CARRIERCODE": "XDESC", "SHIPCONDITDESC": "ROAD", "SOLDTONAME": "深圳市天联终端有限公司", "SOLDTOCOMPANY": "", "SHIPTONAME": "深圳市天联终端有限公司上海库", "SHIPTOCOMPANY": "", "SHIPTOADDRESS": "嘉定区兴邦路1166号", "SHIPTOADDRESS2": "", "SHIPTOADDRESS3": "", "SHIPTOADDRESS4": "", "SHIPTOCITY": "上海", "SHIPTOSTATE": "上海", "SHIPTOZIP": 201800, "SHIPTOCOUNTRY": "中国", "SHIPINSTRUCT": "", "CUSTWHINST": "", "EXCUSTNOTE": "", "EXCUSTNOTE1": "", "SHIPDATE": "13-MAY-2025", "SOLDTOADDRESS": "前湾一路1号A栋201室", "SOLDTOADDRESS3": "", "SOLDTOADDRESS2": "", "SOLDTOCITY": "深圳", "SOLDTOADDRESS4": "", "SOLDTOSTATE": "广东", "SOLDTOZIP": 518000, "SOLDTOCOUNTRY": "中国", "TOTALCARTONQTY": 20, "TOTALQTY": 160, "TOTALWEIGHT": "73.94 KGS", "V_CUBE": 0.22 } ]这个是我的json的信息 但是我执行的报错 { "timestamp": "2025-07-09T02:29:37.783+00:00", "status": 400, "error": "Bad Request", "path": "/pdfJson/compares" }
07-10
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值