Spring 3 MVC和Multiparts

时间:2013-11-19 23:08:14

标签: spring spring-mvc multipart

我正在使用Spring 3的MVC框架,主要仅用于注释。

例如,用户将上传类似:

的内容
------------------------------6526f0c735cd
Content-Disposition: form-data; name="data"

[
  {
    "someField":"foo",
    "someNestedObject":{
      "someDeeperField":"bar",
      "someResourceField":"25f33030-12ed-4636-b5f7-759d27c40f08"
      ...
    }
  },
  ...
]

------------------------------6526f0c735cd
Content-Disposition: form-data; name="25f33030-12ed-4636-b5f7-759d27c40f08"; filename="some.jpg"
Content-Type: image/jpeg

<Binary Data>

请注意,第二部分的名称是第一部分中数据的一部分。然后我的代码看起来像:

@RequestMapping("test")
public static @ResponseBody void test(
    @RequestParam("data") final String data,
    final HttpServletRequest request)
    throws Exception {

    System.out.println(request.getParts());
}

它打印出一个空列表,因为Spring已经使用了Parts InputStream进行自己的处理。这是因为我使用的是MultipartResolver,这是我需要的。

我的问题是,我仍然需要访问这些部分。我无法使用@RequestPart注释,因为在处理完data部分之前,我不会知道部件的名称。我需要能够以编程方式向Spring请求其中一个部分,而不是作为函数的参数。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我找到了解决方案。我正在使用@RequestPart("media") final List<MultipartFile> media。所有作为二进制(媒体)数据的部分都具有名称“media”,其文件名是其唯一标识符。

我仍然喜欢@RequestPart final Map<String, MultipartFile> media,但我会承认在这一点上它只是语法糖。