MultipartFile不在&#34; @RequestParam Map <string,object =“”> requestParams&#34;变量

时间:2016-06-09 08:16:16

标签: java spring spring-mvc

所以我目前正在使用Spring构建Multipart-Fileupload。我想创建我的控制器是通用的,因为它可以为我自己的模块化控制器应用程序启用良好的开端。这就是我与@RequestParam Map<String, Object> requestParams合作的原因。所以我的虚拟函数看起来像这样:

@RequestMapping(path = "uploadtest", method = POST, consumes = MULTIPART_FORM_DATA_VALUE)
    public String test(@RequestParam("file") MultipartFile file,
                       @RequestParam Map<String, Object> requestParams) {
        return "/[...]";
    }

现在,当我发布一个文件时,我会认为它可以通过file - 变量(工作,确定。)和requestParams.get("file")(不起作用)。

所以这是我的问题:

这是否会像这样工作,或者是否只为常规@RequestParams注释启用了多部分支持(= Bug / Feature?)。

2 个答案:

答案 0 :(得分:1)

多部分请求由几个部分组成。在multipart/form-data的情况下,第一部分应该由参数/值对组成,这些参数/值对也可以作为@RequestParam使用。其他部分是文件。

当你有@RequestParam MultipartFile file Spring知道你想要与file参数相关联的部分。由于文件是一个部分,您还可以使用@RequestPart("file") MultipartFile file

请记住,请求参数是字符串。因此Map<String, Object>Map<String, String>基本相同。因此requestParams.get("file")将为您提供请求第一部分中file参数的String值。

&#34;我想创建我的控制器,因为它可以是&#34; 您更希望它尽可能具体。如果你想保持通用,那么首先不要使用控制器。

答案 1 :(得分:1)

我创建了一个伟大的解决方案来获取文件映射为 Map fileMap。 您应该使用:multiRequest.getFileMap(); 来自对象 HttpServletRequest。

    @PostMapping(consumes = {MULTIPART_FORM_DATA_VALUE})
    ResponseEntity<String> createDocument(@RequestParam Map<String, String> allParams, HttpServletRequest request)

Map<String, MultipartFile> fileMap = new HashMap<String, MultipartFile>();
if (request instanceof MultipartHttpServletRequest) {
    MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
    fileMap = multiRequest.getFileMap();
}