java - Spring boot API 接受 JSON(强制)和多部分文件(可选)

标签 java json spring-mvc spring-boot

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

  • 上传文件是可选的。即,请求中可能包含也可能不包含一个或多个文件。

我在下面尝试的代码中使用 spring boot

@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我设置了requiredfalse 。但是,当我没有传递任何文件时,我收到服务器错误。

下面是我的请求正文。

--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]

请建议我怎样做才能满足我的要求。

最佳答案

我想我明白你想做什么。我们尝试过类似的事情。不幸的是,由于处理文件上传的方式与 POST 上正常数据有效负载的方式不同,您可能必须使用不同的 URL。

我们让它在一个浏览器中运行(不记得是哪个),但它很不稳定。这有点像重载 URL。

抱歉,但我希望这会让您失望......

关于java - Spring boot API 接受 JSON(强制)和多部分文件(可选),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892584/

相关文章:

javascript - 无法读取 JSON - 无法读取未定义的属性

Java : checking the value in Java from a JSON Format

java - 向现有 Java 应用程序添加 Web 界面 (Spring MVC)

JavaFX Webview 在 polymer Material 设计元素上出现故障

java - 用 Java 构建词法分析器

javascript - 在 jBoss 6.2 和 jBoss 7.3 中部署应用程序时的不同响应

java - intellij IDEA 如何给 Java 项目添加单元测试?

json - golang,如何在 simplejson 中解码 json 数组的项目?

Spring TemplateEngine 处理错误 :field

java - Spring:在实例化最终字段的 Autowiring 构造函数中使用应用程序属性