it-swarm.com.de

REST - HTTP Post Multipart mit JSON

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

  • Eine JSON-Zeichenfolge
  • Eine Binärdatei

Was ist der richtige Weg, um den Körper einzustellen? Ich werde den HTTP-Aufruf mit der Chrome REST Konsole testen. Daher frage ich mich, ob die richtige Lösung darin besteht, einen "Label" -Schlüssel für festzulegen der JSON-Parameter und die Binärdatei.

Auf der Serverseite verwende ich Resteasy 2.x und lese den Multipart-Body folgendermaßen:

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

Ist das der richtige Weg? Ist es richtig, meine JSON-Zeichenfolge mit dem Schlüssel "myJsonName" abzurufen, der diese bestimmte Inhaltsdisposition identifiziert? Gibt es eine andere Möglichkeit, diese beiden Inhalte in einer mehrteiligen HTTP-Anforderung zu empfangen?

Danke im Voraus

83
thermz

Wenn ich Sie richtig verstehe, möchten Sie eine mehrteilige Anforderung manuell über eine HTTP/REST-Konsole erstellen. Das mehrteilige Format ist einfach; Eine kurze Einführung finden Sie in der HTML 4.01-Spezifikation . Sie müssen sich eine Grenze ausdenken, die nicht im Inhalt enthalten ist, sagen wir HereGoes. Sie setzen den Anfragekopf 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--
137
Vasiliy Faronov