【发布时间】:2014-12-11 00:42:05
【问题描述】:
我目前正在尝试编写一个接受文件上传的 ReST 方法。当用户提交文件时,我还希望他们添加描述,以及与文件内容有关的其他一些元数据(例如,与文件内容关联的“类型”)。我正在使用 Spring 4 的 Spring MVC 控制器。
这是我想做的一个例子:
@RequestMapping(value = "/file", method = RequestMethod.POST)
public @ResponseBody
ResponseEntity<MyFileDTO> uploadCustomAnnotationFile(
@RequestParam("file") MultipartFile uploadFile,
@RequestBody MyFileDetailsDTO fileDetails) {
log.debug("This is working!");
}
但是,如果我尝试通过 Swagger UI 调用此方法,则会收到不受支持的媒体类型异常:
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundarycAbgNBTQ09GQTBif' not supported
我怀疑我不能在 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!");
}
新异常:
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.
提前致谢, 托尼亚
【问题讨论】:
-
请注意,如果您的@Controller 类在其
@RequestMapping的consumes属性中声明了错误的端点格式,也可能会抛出HttpMediaTypeNotSupportedException,例如,如果您在类中声明consumes={"application/json"}级别,但随后有一个需要使用“multipart/form-data”的端点。
标签: java spring rest spring-mvc