我想使用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
content-Type = multipart/form-data or multipart/mixed
org.springframework.web.multipart.support.MissingServletRequestPartException
谁能帮助我解决这个问题?
我可以@RequestPart同时将Multipart和JSON发送到服务器吗?
@RequestPart
这就是我用JSON数据实现Spring MVC Multipart Request的方式。
基于Spring 4.0.2版本中的RESTful服务,可以使用@RequestPart来实现HTTP请求,其中第一部分为XML或JSON格式的数据,第二部分为文件。下面是示例实现。
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); }
创建一个FormData对象。
使用以下步骤之一将文件追加到FormData对象。
formData.append("file", document.forms[formName].file.files[0]);
formData.append("file", myFile, "myfile.txt");
formData.append("file", myBob, "myfile.txt");
将请求发送到服务器。
要求详细信息: Content-Type: undefined。这将导致浏览器将Content-Type设置为multipart / form- data并正确填充边界。手动将Content-Type设置为multipart / form-data将无法填写请求的边界参数。
Content-Type: undefined
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--