2013-11-19 4 views
1

Я использую структуру MVC Spring 3, в основном только для аннотаций.Spring 3 MVC и Multiparts

В качестве примера, пользователь будет загружать что-то вроде:

------------------------------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()); 
} 

Он печатает пустой список, потому что весна уже поглотила InputStream частей для собственной переработки. Это потому, что я использую MultipartResolver, и это то, что мне нужно.

Моя проблема в том, что мне по-прежнему нужен доступ к частям. Я не могу использовать аннотацию @RequestPart, потому что я не буду знать названия частей до тех пор, пока не обработаю часть data. Мне нужно просить Spring для одной из частей программно, а не аргумент функции.

Заранее спасибо.

+0

Я только узнал, что у вас может быть такой параметр, как «@RequestParam final Map params', что очень приятно. К сожалению, вы не можете сделать финальную карту @RequestPart Map parts'. – jojenki

+0

Возможно, вы должны добавить свой комментарий как ответ и принять его. Подход выглядит хорошо. –

+0

Я думаю, вы неправильно поняли это, или я не был ясен. '@RequestPart final Map детали' _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ И окончательная карта @RequestParam Map params' не дает мне доступ к частям. – jojenki

ответ

1

Я нашел решение. Я использую @RequestPart("media") final List<MultipartFile> media. Все части, которые являются двоичными (мультимедийными) данными, имеют название «media», а их имя файла - их уникальный идентификатор.

Мне все еще нравится @RequestPart final Map<String, MultipartFile> media, но я соглашусь, что на данный момент это действительно просто синтаксический сахар.