it-roy-ru.com

REST - HTTP-сообщение, состоящее из нескольких частей, с JSON

Мне нужно получить HTTP Post Multipart, которая содержит только 2 параметра:

  • Строка JSON
  • Бинарный файл

Как правильно установить тело? Я собираюсь протестировать HTTP-вызов, используя консоль Chrome REST, поэтому мне интересно, правильное ли решение - установить ключ "label" для параметра 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-запросе?

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

80
thermz

Если я вас правильно понимаю, вы хотите составить многокомпонентный запрос вручную с консоли 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--
136
Vasiliy Faronov