Javascript Spring引导不支持具有多部分请求的媒体类型

Javascript Spring引导不支持具有多部分请求的媒体类型,javascript,java,json,spring-boot,Javascript,Java,Json,Spring Boot,我试图通过一个多部分POST请求将一个文件和两个json对象发送到我的Spring Boot后端,但我总是得到415HTTP响应。下面是我已经尝试过的事情列表: 按照建议使用应用程序/json内容类型将每个对象作为Blob文件发送 按建议将每个对象作为字符串发送 按照建议在ajax请求中添加contentType:false和processData:false 在Spring引导控制器中使用@RequestParam而不是@RequestPart 我错过了什么 请求如下: const data

我试图通过一个多部分POST请求将一个文件和两个json对象发送到我的Spring Boot后端,但我总是得到415HTTP响应。下面是我已经尝试过的事情列表:

  • 按照建议使用
    应用程序/json
    内容类型将每个对象作为
    Blob
    文件发送
  • 按建议将每个对象作为
    字符串发送
  • 按照建议在ajax请求中添加
    contentType:false
    processData:false
  • 在Spring引导控制器中使用
    @RequestParam
    而不是
    @RequestPart
  • 我错过了什么

    请求如下:

    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");
        }
    
    @PostMapping(“/upload”)
    公共响应属性上载文件(@NotEmpty@RequestPart(“文件”)MultipartFile MultipartFile,@NotNull@RequestPart(“entity1信息”)entity1 entity1,@NotNull@RequestPart(“entity2信息”)entity2 entity2,HttpServletRequest请求){
    log.debug(请求);
    ...
    返回响应。ok(“ok”);
    }
    
    您必须将“内容类型”设置为标题

    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
    
    curl-v-H“内容类型:多部分/表单数据”-F“entiry1 info=@person1;Type=application/json”-F“entiry2 info=@person2;Type=application/json”-F“文件=@logo.png;Type=multipart/form data”-X POST http://:8080/api/upload
    
    注意:上面的person1和person2是json文件。

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

    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
    
    curl-v-H“内容类型:多部分/表单数据”-F“entiry1 info=@person1;Type=application/json”-F“entiry2 info=@person2;Type=application/json”-F“文件=@logo.png;Type=multipart/form data”-X POST http://:8080/api/upload
    

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

    我终于找到了为什么我总是从Spring Boot后端获得
    415 http响应的原因

    问题是请求的url错误。它指向一个只需要json数据而不需要多部分的端点。这就是为什么Spring Boot会返回
    不受支持的媒体类型


    希望这能帮助其他人。

    我终于找到了为什么我总是从Spring Boot后端获得
    415 http响应的原因

    问题是请求的url错误。它指向一个只需要json数据而不需要多部分的端点。这就是为什么Spring Boot会返回
    不受支持的媒体类型


    希望这能帮助其他人。

    那不行neither@H.Saul正如我前面提到的,您是否尝试将curl命令添加到带有“-v-H”内容类型的url:multipart/form data”“?是的,我尝试了。但问题在于我在回答中指定的url本身。那么你怎么说“那也不行”呢?如果您调用了正确的url,那么以上的curl命令肯定可以正常工作。如果你调用了错误的url,那是你的错误,这并不意味着我的答案无效。你建议我尝试在标题中设置内容类型。我就是这么做的。但那没用。如果我从一开始就有了正确的url,那么我就不会问这个问题了。这是行不通的neither@H.Saul正如我前面提到的,您是否尝试将curl命令添加到带有“-v-H”内容类型的url:multipart/form data”“?是的,我尝试了。但问题在于我在回答中指定的url本身。那么你怎么说“那也不行”呢?如果您调用了正确的url,那么以上的curl命令肯定可以正常工作。如果你调用了错误的url,那是你的错误,这并不意味着我的答案无效。你建议我尝试在标题中设置内容类型。我就是这么做的。但那没用。如果我从一开始就有正确的url,那么我就不会问这个问题了。