2012-01-31 3 views
63

мне нужно получить HTTP Post Multipart, который содержит только два параметра:REST - HTTP Post Multipart с JSON

  • JSON строку
  • двоичный файл

Какой правильный путь установить тело? Я собираюсь протестировать HTTP-вызов с помощью консоли Chrome REST, поэтому мне интересно, нужно ли правильное решение установить «метку» для параметра JSON и двоичного файла.

На стороне сервера я использую Resteasy 2.x, и я буду читать многотомное тело, как это:

@POST 
@Consumes("multipart/form-data") 
public String postWithPhoto(MultipartFormDataInput multiPart) { 
    Map <String, List<InputPart>> params = multiPart.getFormDataMap(); 
    String myJson = params.get("myJsonName").get(0).getBodyAsString(); 
    InputPart imagePart = params.get("photo").get(0); 
    //do whatever I need to do with my json and my photo 
} 

Является ли это путь? Правильно ли получить мою строку JSON, используя ключ «myJsonName», который идентифицирует конкретное содержимое? Есть ли другой способ получить эти 2 контента по одному HTTP-запросу?

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

+1

Какой ресурс REST это? Как две части связаны с уровнем ресурсов? –

+0

На самом деле способ обработки этого ресурса не является полностью RESTful, потому что изображение является «компонентом» ресурса, а не другим ресурсом. – thermz

ответ

118

Если я вас правильно понял, вы хотите, чтобы составить многослойный запрос вручную из консоли HTTP/REST. Многостраничный формат прост; краткое введение можно найти in the HTML 4.01 spec. Вам нужно придумать границу, которая является строкой, не найденной в содержимом, скажем, HereGoes. Вы устанавливаете заголовок запроса Content-Type: multipart/form-data; boundary=HereGoes. Тогда это должно быть действительным органом запроса:

--HereGoes 
Content-Disposition: form-data; name="myJsonString" 
Content-Type: application/json 

{"foo": "bar"} 
--HereGoes 
Content-Disposition: form-data; name="photo" 
Content-Type: image/jpeg 
Content-Transfer-Encoding: base64 

<...JPEG content in base64...> 
--HereGoes-- 
+1

Это именно то, что мне нужно прочитать :-) спасибо – thermz

+0

Вы также можете добавить приложение в soap-ui. Это облегчает передачу в фактическое тело сообщения и тип контента. –

+0

Блестящее объяснение! – abbasdgr8

Смежные вопросы