首页 > 解决方案 > Spring Boot REST 多部分请求(文件 + json)抛出 415 Unsupported Media Type 异常

问题描述

我正在使用 Spring Boot 版本 = 1.5.2.RELEASE。当我发送带有 json 对象的多部分文件以在邮递员中上传文件时,它会抛出 415 Unsupported Media Type 异常。

这是我的控制器类。

@RestController
@RequestMapping("/service/promotion/")
public class JobController {
....
....
....
@RequestMapping(value = "/job/test", method = RequestMethod.POST, produces = "application/json", consumes = "multipart/form-data")
public ResponseEntity<Object> createJobTest(@Valid @RequestBody JobRequest jobRequest,
            @RequestParam(value = "file", required = false) MultipartFile multiPartFile) throws Exception {

我的 json 请求类。

 public class JobRequest {
        private String campaignKey;
        private String communicationId;
        private Integer channelId;
        private String templateType;
        private String subject;
        private String frequencyControl;
        private Integer leadsRequested;
        private String keywordRelavance;
        private String scheduledAt;
        private String file;
        private String updatedBy;
        
        //getter and setter
    }   

邮递员中的Json请求 在此处输入图像描述

邮递员中的多部分文件请求 在此处输入图像描述

标题内容类型 在此处输入图像描述

但是当我从控制器类和邮递员中删除消耗时

@RequestMapping(value = "/job/test", method = RequestMethod.POST, produces = "application/json")

然后调试器进入控制器类,但多部分文件值 在请求对象中为空,如

在此处输入图像描述

我用谷歌搜索了很多已经发布的类似问题,但没有一个对我有帮助。请帮我解开这个谜团。

谢谢你。

标签: jsonspring-bootmultipartform-data

解决方案


检查此文件上传以及 Jersey restful web 服务中的其他对象

另一种方法是您可以在文本中传递整个对象,就像在表单数据中传递文件并在对象中转换一样。

 @RequestMapping(value = "/uploadDocs", method = RequestMethod.POST, produces = "application/json", consumes = "multipart/form-data")
    public ResponseEntity<Object> methodName(@RequestParam("files") MultipartFile file, @RequestParam("anyKeyName") String objectString)

比您可以使用将字符串转换为对象

Class object = new ObjectMapper().readValue(objectString, Class.class);

推荐阅读