当前位置: 首页 > 面试题库 >

带有JSON的Spring MVC多部分请求

盖斌
2023-03-14
问题内容

我想使用Spring MVC发布带有一些JSON数据的文件。因此,我开发了一项休息服务

@RequestMapping(value = "/servicegenerator/wsdl", method = RequestMethod.POST,consumes = { "multipart/mixed", "multipart/form-data" })
@ResponseBody
public String generateWSDLService(@RequestPart("meta-data") WSDLInfo wsdlInfo,@RequestPart("file") MultipartFile file) throws WSDLException, IOException,
        JAXBException, ParserConfigurationException, SAXException, TransformerException {
    return handleWSDL(wsdlInfo,file);
}

当我从其他客户端发送请求时 content-Type = multipart/form-data or multipart/mixed,出现下一个异常: org.springframework.web.multipart.support.MissingServletRequestPartException

谁能帮助我解决这个问题?

我可以@RequestPart同时将Multipart和JSON发送到服务器吗?


问题答案:

这就是我使用JSON数据实现Spring MVC Multipart Request的方式。

带有JSON数据的分段请求(也称为混合分段):

基于Spring 4.0.2版本中的RESTful服务,可以使用@RequestPart来实现HTTP请求,其中第一部分为XML或JSON格式的数据,第二部分为文件。以下是示例实现。

Java代码段:

Controller中的Rest服务将混合使用@RequestPart和MultipartFile来满足此类Multipart + JSON请求。

@RequestMapping(value = "/executesampleservice", method = RequestMethod.POST,
    consumes = {"multipart/form-data"})
@ResponseBody
public boolean executeSampleService(
        @RequestPart("properties") @Valid ConnectionProperties properties,
        @RequestPart("file") @Valid @NotNull @NotBlank MultipartFile file) {
    return projectService.executeSampleService(properties, file);
}

前端(JavaScript)代码段:

  1. 创建一个FormData对象。

  2. 使用以下步骤之一将文件追加到FormData对象。

  3. 如果文件已使用“文件”类型的输入元素上载,则将其附加到FormData对象。 formData.append("file", document.forms[formName].file.files[0]);

  4. 将文件直接附加到FormData对象。 formData.append("file", myFile, "myfile.txt");要么formData.append("file", myBob, "myfile.txt");
  5. 创建带有字符串化JSON数据的Blob,并将其附加到FormData对象。这将导致multipart请求中第二部分的Content-type“ application / json”,而不是文件类型。

  6. 将请求发送到服务器。

  7. 要求详细信息:
    Content-Type: undefined。这将导致浏览器将Content-Type设置为multipart / form-data并正确填充边界。手动将Content-Type设置为multipart / form-data将无法填写请求的边界参数。

JavaScript代码:

formData = new FormData();

formData.append("file", document.forms[formName].file.files[0]);
formData.append('properties', new Blob([JSON.stringify({
                "name": "root",
                "password": "root"                    
            })], {
                type: "application/json"
            }));

要求详细信息:

method: "POST",
headers: {
         "Content-Type": undefined
  },
data: formData

请求有效负载:

Accept:application/json, text/plain, */*
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryEBoJzS3HQ4PgE1QB

------WebKitFormBoundaryvijcWI2ZrZQ8xEBN
Content-Disposition: form-data; name="file"; filename="myfile.txt"
Content-Type: application/txt


------WebKitFormBoundaryvijcWI2ZrZQ8xEBN
Content-Disposition: form-data; name="properties"; filename="blob"
Content-Type: application/json


------WebKitFormBoundaryvijcWI2ZrZQ8xEBN--


 类似资料:
  • 我试图编写完整的多部分流,从客户端使用Spring restTemplate发送多部分请求,从服务器端自动将不同部分解析为对象(我使用JAXB进行对象封送),并以多部分形式返回响应。 我能够实现几乎所有的流,但是我不能从spring Controller中用jaxb对象发送多部分响应。 试图使he FormHttpMessageConverter正确地编写部分,但这没有帮助 是否有任何方法使Spr

  • 我想用Spring MVC发布一个包含一些JSON数据的文件。所以我开发了一个rest服务作为

  • 我正在尝试通过使用多部分数据主体的JMeter构建HTTP请求。 我有一个HTTP头管理器,其内容类型设置为多部分/表单数据;边界=AaB03x。我选择了“将多部分/表单数据用于POST”。 然后我创建了一个数据主体, 当我运行这个程序时,我发现请求没有正确地发送正文,而是发送了一些随机数据, 发布数据: 并给出错误响应, 我的第二个问题是:请求的第3部分发送一个要上载的文件。我可以通过某种方式传

  • 我正在尝试将数据从应用程序上传到Spring后端服务。要上传的内容是一个DataModel,其中包含要创建的对象的数据和链接到数据的几个图像。因此,我使用此方法签名: 我尝试使用注释,但要么得到一个空白的图像数组,要么助手为空。你将如何解决这个问题? 提前谢谢。

  • 问题内容: 我有一个API端点,必须向其发送多部分HTTP请求,该请求由两部分组成(文件系统文件)和(JSON对象)。 经过一些研究,我发现了如何在AngularJS中执行多部分请求: 1) 该函数最初具有以下形式: 此实现的结果是,请求的各个部分没有设置。 Blob ,对象看起来像这样(有点混乱,基本上第一部分是of ,第二个): 第二种方法为请求的每个部分设置了正确的内容,但没有为部分设置任何

  • 问题内容: 我有以下POST请求表格(简化): 我尝试发送POST请求: 但它返回状态并带有以下注释: 请指出我的错误。我应该进行哪些更改才能使其正常工作? 问题答案: 您自己设置标题,包括边界。不要这样 会为您生成一个边界并将其设置在标头中,但是如果您 已经 设置了标头,那么生成的有效负载和标头将不匹配。只需将标题全部放下即可: 请注意,我还给了零件一个文件名(路径的基本名称)。 有关多部分PO