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--