Spring引导API,它接受JSON(强制)和多部分文件(可选)

时间:2015-08-08 11:24:48

标签: java json spring-mvc spring-boot

我想创建一个API,它接受两个对象(作为JSON)并允许上传多个文件。

  • 上传文件是可选的。即请求可能有或可能没有请求中的一个或多个文件。

我在下面的试用代码中使用弹簧启动

@RequestMapping(value = "/some-action", method = RequestMethod.POST)
public void post(@RequestPart(value = "jsonString") String jsonAsString, 
                 @RequestPart(value = "file", required = false) MultipartFile[] files, 
                 HttpServletResponse response)

我接受jsonAsString,因为我无法接受对象。所以,对于临时解决方案,我传递的是json字符串。

现在,您可以在上面的代码中看到file已将required设置为false。但是,当我没有传递任何文件时,我收到服务器错误。

以下是我的请求正文。

--ARCFormBoundaryer1k80a5e1att9
Content-Disposition: form-data; name="text"

"{"key":"value"}"
--ARCFormBoundaryer1k80a5e1att9--

以下是我得到的错误。 org.apache.tomcat.util.http.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly at org.apache.tomcat.util.http.fileupload.MultipartStream.readHeaders(MultipartStream.java:487) ~[tomcat-embed-core-8.0.23.jar:8.0.23] at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:889) ~[tomcat-embed-core-8.0.23.jar:8.0.23] at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:854) ~[tomcat-embed-core-8.0.23.jar:8.0.23] at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256) ~[tomcat-embed-core-8.0.23.jar:8.0.23] at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280) ~[tomcat-embed-core-8.0.23.jar:8.0.23] at org.apache.catalina.connector.Request.parseParts(Request.java:2730) ~[tomcat-embed-core-8.0.23.jar:8.0.23]

请告诉我如何才能满足我的要求。

1 个答案:

答案 0 :(得分:1)

我想我明白你要做什么。我们尝试过类似的东西不幸的是,由于处理文件上传的方式与POST上的普通数据有效负载不同,您可能不得不使用不同的URL。

我们让它在一个浏览器中工作(不记得哪个),但它很好看。这有点像重载URL。

抱歉,但我希望这确实让你失望太多......