Necesito recibir un HTTP Post Multipart que contiene solo 2 parámetros:
- Una cadena JSON
- Un archivo binario
¿Cuál es la forma correcta de configurar el cuerpo? Voy a probar la llamada HTTP usando la consola REST de Chrome, así que me pregunto si la solución correcta es establecer una clave de "etiqueta" para el parámetro JSON y el archivo binario.
En el lado del servidor estoy usando Resteasy 2.x, y voy a leer el cuerpo de Multipartes así:
@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
}
¿Es este el camino a seguir? ¿Es correcto recuperar mi cadena JSON usando la clave "myJsonName" que identifica esa disposición de contenido en particular? ¿Hay alguna otra forma de recibir estos 2 contenidos en una solicitud HTTP de varias partes?
Gracias por adelantado
Respuestas:
Si lo entiendo correctamente, desea redactar una solicitud de varias partes manualmente desde una consola HTTP / REST. El formato de varias partes es simple; se puede encontrar una breve introducción en la especificación HTML 4.01 . Necesita crear un límite, que es una cadena que no se encuentra en el contenido, digamos
HereGoes
. Establece el encabezado de la solicitudContent-Type: multipart/form-data; boundary=HereGoes
. Entonces este debería ser un cuerpo de solicitud válido:--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--
fuente
\*
por ejemplo, como un límite? No se permite que exista en json ni en base64.