REST - многопоточный пост HTTP с JSON

Мне нужно получить HTTP Post Multipart, который содержит только 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

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