spring boot不支持包含多部分请求的媒体类型

ajsxfq5m  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(774)

我试图用一个多部分post请求将一个文件和两个json对象发送到我的spring引导后端,但是我总是得到一个415http响应。下面是我已经试过做的事情的列表:
将每个对象作为 Blob 使用 application/json 此处建议的内容类型
将每个对象作为 String 正如这里所建议的
添加 contentType: false 以及 processData: false 在这里建议的ajax请求中
使用 @RequestParam 而不是 @RequestPart Spring引导控制器
我错过了什么?
请求如下:

const data = new FormData();
data.append('file', new Blob([file], {type: 'multipart/form-data'}));
data.append('entity1-info', new Blob([JSON.stringify(entity1Object)], {type: 'application/json'}));
data.append('entity2-info', new Blob([JSON.stringify(entity2Object)], {type: 'application/json'}));

return axios({
   method: 'post',
   url: url,
   headers: {'Authorization': `Bearer ${idToken}`},
   data: data,
   contentType: false,
   processData: false
});

这是我的spring boot控制器:

@PostMapping("/upload")
    public ResponseEntity<String> uploadFile(@NotEmpty @RequestPart("file") MultipartFile multipartFile, @NotNull @RequestPart("entity1-info") Entity1 entity1, @NotNull @RequestPart("entity2-info") Entity2 entity2, HttpServletRequest request) {
        log.debug(request);
        ...
        return ResponseEntity.ok("ok");
    }
qcuzuvrc

qcuzuvrc1#

我终于找到了为什么我总是 415 http response 从我的 Spring 启动后端。
问题是请求的url错误。它指向一个只需要json数据而不需要多部分的端点。这就是春靴回归的原因 Unsupported media type .
希望这能帮助别人。

9avjhtql

9avjhtql2#

您必须将“内容类型”设置为标题

Content-Type:multipart/form-data

我正在使用类似于下面的curl命令,它运行良好。

curl -v -H "Content-Type:multipart/form-data" -F "entiry1-info=@person1;type=application/json" -F "entiry2-info=@person2;type=application/json" -F "file=@logo.png;type=multipart/form-data" -X POST http://<IP_Address>:8080/api/upload

注意:上面的person1和person2是json文件。

相关问题