REST - HTTP Post Multipart с JSON - PullRequest
       16

REST - HTTP Post Multipart с JSON

81 голосов
/ 31 января 2012

Мне нужно получить составную часть HTTP-сообщения, содержащую только 2 параметра:

  • Строка JSON
  • Двоичный файл

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

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

@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 Ответ

136 голосов
/ 31 января 2012

Если я вас правильно понимаю, вы хотите составить многочастный запрос вручную с консоли HTTP / REST.Составной формат прост;краткое введение можно найти в спецификации HTML 4.01 .Вам нужно придумать границу, то есть строку, не найденную в контенте, скажем, 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--
...