J'ai besoin de recevoir un post multipart HTTP qui ne contient que 2 paramètres:
Quelle est la bonne façon de définir le corps? Je vais tester l'appel HTTP avec la console Chrome REST, je me demande donc si la solution appropriée consiste à définir une clé "label" pour le paramètre JSON et le fichier binaire.
Sur le serveur, j'utilise Resteasy 2.x, et je vais lire le corps multipart comme ceci:
@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
}
Est-ce le chemin à parcourir? Est-il correct de récupérer ma chaîne JSON en utilisant la clé "myJsonName" qui identifie cette disposition de contenu particulière? Existe-t-il un autre moyen de recevoir ces 2 contenus en une seule requête HTTP en plusieurs parties?
Merci d'avance
Si je vous ai bien compris, vous souhaitez composer manuellement une demande en plusieurs parties à partir d'une console HTTP/REST. Le format en plusieurs parties est simple; une brève introduction peut être trouvée dans la spécification HTML 4.01 . Vous devez définir une limite, qui est une chaîne introuvable dans le contenu, disons HereGoes
. Vous définissez l'en-tête de demande Content-Type: multipart/form-data; boundary=HereGoes
. Cela devrait alors être un corps de requête valide:
--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--