我想使用SpringMVC发布一个包含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
从rest客户机发送请求时,我得到下一个异常:org.springframework.web.multipart.support.MissingServletRequestPartException
有人能帮我解决这个问题吗?
我可以使用@RequestPart
将Multipart和JSON都发送到服务器吗?
6条答案
按热度按时间voase2hg1#
这就是我如何使用JSON数据实现SpringMVC多部分请求。
包含JSON数据的多部分请求(也称为混合多部分):
基于Spring 4.0.2版本的RESTful服务,通过@RequestPart可以实现第一部分为XML或JSON格式数据,第二部分为文件的HTTP请求,下面是示例实现。
Java程式码片段:
控制器中的Rest服务将混合@RequestPart和MultipartFile来服务此类Multipart + JSON请求。
前端(JavaScript)代码段:
1.建立FormData对象。
1.使用以下步骤之一将文件追加到FormData对象。
1.如果已使用类型为“file”的输入元素上载文件,则将其附加到FormData对象。
formData.append("file", document.forms[formName].file.files[0]);
1.直接将文件追加到FormData对象。
formData.append("file", myFile, "myfile.txt");
ORformData.append("file", myBob, "myfile.txt");
1.使用字符串化的JSON数据创建blob并将其附加到FormData对象。这将导致多部分请求中第二部分的Content-type为“application/json”,而不是文件类型。
1.将请求发送到服务器。
1.请求详细信息:
Content-Type: undefined
。这会使浏览器将Content-Type设置为multipart/form-data并正确填充边界。手动将Content-Type设置为multipart/form-data将无法填充请求的边界参数。Javascript代码:
请求详细信息:
请求有效负载:
gj3fmq9x2#
这一定行!
客户端(Angular ):
后端 Spring Boot :
ecbunoof3#
我们在项目中看到,使用JSON和文件的post请求在前端和后端开发人员之间造成了很多混乱,导致了不必要的时间浪费。
下面是一个更好的方法:将file bytes数组转换为Base64字符串,并以JSON格式发送。
将文件转换为base64字符串的JS代码:
chhkpiq44#
如文件所述:
在找不到“multipart/form-data”请求中由其名称标识的部分时引发。
这可能是因为请求不是multipart/form-data,因为请求中不存在该部件,或者Web应用程序未正确配置为处理多部件请求-例如,没有MultipartResolver。
bsxbgnwa5#
对于Angular2+用户。尝试在混合部分请求中发送JSON有效负载,如下所示。
下面给出完整的功能。
of1yzvn46#
您也可以使用下一种方法,将列表
List<MultipartFile>
和@RequestPart("myObj")
作为@RestController
内的方法中的参数而在axios方面则有一点react: