我正在尝试在spring boot 2.0应用程序中使用新的反应式web-mvc实现 . 我正在尝试定义一个消耗多部分文件的方法但是没有成功使其工作:( - 我总是得到415错误 .
一方面我有一个包含以下请求映射的控制器:
@RequestMapping(method = RequestMethod.POST, path = "/myPath/{param}/{param2}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseBody
public Mono<Void> postFile(
@RequestBody MultipartFile data,
@PathVariable("param") String param,
@PathVariable("param2") String param2,
@RequestHeader(name = HEADER_DATE, required = false) @DateTimeFormat(pattern = DATE_FORMAT) Instant instant
){
return fileService.handleData(Mono.just(data), param, param2, instant);
}
另一方面,我不得不在基本依赖项的顶部添加一个服务器,因为它似乎netty不处理多部分文件 . 我添加了 spring-boot-starter-tomcat
依赖项,使 MultipartAutoConfiguration
在应用程序自动配置上匹配并满足 .
当使用curl调用发布内容时: curl 'Meta-Date: 20170101104532' --form "file=@file.bin" http://localhost:8082/myPath/foo/bar
,同时调试日志被激活( logging.level.org.springframework.web=DEBUG
)我遇到了这个异常: org.springframework.web.server.UnsupportedMediaTypeStatusException: Request failure [status: 415, reason: "Content type 'multipart/form-data;boundary=------------------------58fa43b8f1a26de4' not supported"]
RequestBodyArgumentResolver
抛出此错误,该错误具有以下支持的媒体类型: [*/*, text/xml, application/*+json;charset=UTF-8, application/xml, text/plain;charset=UTF-8, application/x-www-form-urlencoded, application/json;charset=UTF-8]
由9 DecoderHttpMessageReader
提供 .
在发布之前我还看了一下:
-
Spring MultiPart MediaType Unsupported这似乎与此无关,因为我的autoconf报告包含以下条目:
MultipartAutoConfiguration#multipartResolver matched
-
set content-type to utf-8 with angularjs $http添加 Headers 设置
Content-Transfer-Encoding: binary
没有改变任何内容 .
我的理解是Spring Web 5.0使用了一个新的请求解码器系统,因为我没有在spring 4 spring启动应用程序中找到这些类,并且还没有 DecoderHttpMessageReader
处理multipart文件我错过了什么?或者我应该等待一个实施?
2 回答
好的,这似乎暂时没有实现,因为它目前存在此功能的拉取请求:Add reactive multipart request support #1201
应该早点检查一下......
[编辑]:问题已经解决并合并到Spring master分支中 . 应该不再是一个问题 .
请注意,它是一个开发者,但这是我设法做到的 .