it-swarm-eu.dev

REST - HTTP Post Multipart con JSON

Devo ricevere un Post HTTP multipart che contiene solo 2 parametri:

  • Una stringa JSON
  • Un file binario

Qual è il modo corretto di impostare il corpo? Ho intenzione di testare la chiamata HTTP utilizzando Chrome REST console, quindi mi chiedo se la soluzione corretta è impostare un tasto "etichetta" per il parametro JSON e il file binario.

Sul lato server sto usando Resteasy 2.x, e leggerò il corpo Multipart in questo modo:

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

È questa la strada da percorrere? È corretto recuperare la mia stringa JSON usando la chiave "myJsonName" che identifica quella particolare disposizione di contenuti? Esiste un altro modo per ricevere questi 2 contenuti in una richiesta multipart HTTP?

Grazie in anticipo

83
thermz

Se ti capisco correttamente, vuoi comporre manualmente una richiesta multipart da una console HTTP/REST. Il formato multipart è semplice; è possibile trovare una breve introduzione nelle specifiche HTML 4.01 . Devi trovare un limite, che è una stringa non trovata nel contenuto, diciamo HereGoes. Hai impostato l'intestazione della richiesta Content-Type: multipart/form-data; boundary=HereGoes. Quindi questo dovrebbe essere un corpo di richiesta valido:

--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--
137
Vasiliy Faronov