REST – HTTP Post Multipart mit JSON

Ich benötige ein HTTP Post Multipart, das nur 2 Parameter enthält:

  • Eine JSON-Zeichenfolge
  • Eine binäre Datei

Welches ist der richtige Weg den Körper zu setzen? Ich werde den HTTP-Anruf mithilfe der Chrome-REST-Konsole testen. Daher frage ich mich, ob die richtige Lösung darin besteht, einen “Label” -Schlüssel für den JSON-Parameter und die Binärdatei festzulegen.

Auf der Server-Seite verwende ich Resteasy 2.x, und ich werde den Multipart-Körper so lesen:

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

Ist das der Weg zu gehen? Ist es richtig, meine JSON-Zeichenfolge mit dem Schlüssel “myJsonName” abzurufen, der diese bestimmte Inhaltsdisposition identifiziert? Gibt es eine andere Möglichkeit, diese 2 Inhalte in einer HTTP-Multipart-Anfrage zu empfangen?

Danke im Voraus

Wenn ich Sie richtig verstehe, möchten Sie eine mehrteilige Anfrage manuell von einer HTTP / REST-Konsole aus erstellen. Das Multipart-Format ist einfach; Eine kurze Einführung findet sich in der HTML 4.01 Spezifikation . Sie müssen sich eine Grenze einfallen lassen, bei der es sich um eine Zeichenfolge handelt, die nicht im Inhalt enthalten ist, sagen wir HereGoes . Sie setzen den Anforderungsheader Content-Type: multipart/form-data; boundary=HereGoes Content-Type: multipart/form-data; boundary=HereGoes . Dann sollte dies ein gültiger Anfragetext sein:

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