Мне нужно получить 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-запросе?
заранее спасибо
Ответы:
Если я вас правильно понял, вы хотите составить составной запрос вручную из консоли 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--
источник
\*
например, не должно работать как граница? Не разрешено существовать ни в json, ни в base64.