Nep*_*s76 10 java rest spring spring-mvc
我目前正在尝试编写一个接受文件上传的ReST方法.当用户提交文件时,我还希望他们添加描述以及关于文件内容的一些其他元数据(例如,与文件内容相关联的"类型").我正在使用Spring 4的Spring MVC Controller.
这是我想要做的一个例子:
@RequestMapping(value = "/file", method = RequestMethod.POST)
public @ResponseBody
ResponseEntity<MyFileDTO> uploadCustomAnnotationFile(
@RequestParam("file") MultipartFile uploadFile,
@RequestBody MyFileDetailsDTO fileDetails) {
log.debug("This is working!");
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试通过Swagger UI调用此方法,则会得到不受支持的媒体类型异常:
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundarycAbgNBTQ09GQTBif' not supported
Run Code Online (Sandbox Code Playgroud)
我怀疑我不能在1个请求中混合application/json和multipart/form-data?
更新:基于zeroflagL的响应并遵循提供的链接到特定于我正在尝试做的文档,并使用@RequestPart而不是@RequestBody,我取得了很小的进展,但这仍然不是工作.
新方法签名:
@RequestMapping(value = "/file", method = RequestMethod.POST)
public @ResponseBody
ResponseEntity<MyFileDTO> uploadCustomAnnotationFile(
@RequestPart MultipartFile uploadFile,
@RequestPart MyFileDetailsDTO fileDetails) {
log.debug("This is working!");
}
Run Code Online (Sandbox Code Playgroud)
新例外:
2014-12-11 09:21:45.237 [http-nio-8443-exec-8] ERROR c.i.h.c.ControllerExceptionHandler [ControllerExceptionHandler.groovy:58] - Controller Exception
org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'fileDetails' is not present.
Run Code Online (Sandbox Code Playgroud)
托尼亚,提前谢谢
Spring 文档明确解释了要做什么。
混合 application/json 和 multipart/form-data 的想法是错误的,因为application/json
这将是多部分(原文如此!)请求的一部分。
WebKitFormBoundary
让我认为您尝试从浏览器发送 AJAX 请求,我想知道您是否真的发送 JSON。AFAIK 不可能像 Spring 文档中所示那样显式添加(真正的)JSON 部分。也许您可以向我们展示客户端代码。
无论如何你不能使用@RequestBody
,因为这将包含你想要上传的文件。你必须使用@RequestPart
. 如果您将表单数据(而不是 JSON)与文件一起发送,那么您根本不需要任何注释。
归档时间: |
|
查看次数: |
6067 次 |
最近记录: |