REST – HTTP Post Multipart con JSON

Devo ricevere un HTTP Post Multipart che contenga solo 2 parametri:

  • Una stringa JSON
  • Un file binario

Qual è il modo corretto per impostare il corpo? Sto testando la chiamata HTTP utilizzando la console REST di Chrome, quindi mi chiedo se la soluzione corretta sia quella di impostare una chiave “label” per il parametro JSON e il file binario.

Dal 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> 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 utilizzando la chiave “myJsonName” che identifica quel particolare contenuto-disposizione? C’è un altro modo per ricevere questi 2 contenuti in una richiesta multipart HTTP?

Grazie in anticipo

Se ti capisco correttamente, vuoi comporre manualmente una richiesta multipart da una console HTTP / REST. Il formato multipart è semplice; una breve introduzione può essere trovata nella specifica HTML 4.01 . Devi trovare un confine, che è una stringa non trovata nel contenuto, diciamo HereGoes . Imposta l’intestazione della richiesta Content-Type: multipart/form-data; boundary=HereGoes 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--