102 votes

REST - POST HTTP Multipart avec JSON

J'ai besoin de recevoir un HTTP Post Multipart qui contient seulement 2 paramètres :

  • Une chaîne JSON
  • Un fichier binaire

Quelle est la bonne façon de définir le corps? Je vais tester l'appel HTTP en utilisant la console REST de Chrome, donc je me demande si la solution correcte est de définir une clé "label" pour le paramètre JSON et le fichier binaire.

Côté serveur, j'utilise Resteasy 2.x, et je vais lire le corps Multipart de cette manière :

@POST
@Consumes("multipart/form-data")
public String postWithPhoto(MultipartFormDataInput  multiPart) {
  Map > params = multiPart.getFormDataMap();
  String myJson = params.get("myJsonName").get(0).getBodyAsString();
  InputPart imagePart = params.get("photo").get(0);
  //faire ce que je dois faire avec mon JSON et ma photo
}

Est-ce la bonne façon de faire? Est-il correct de récupérer ma chaîne JSON en utilisant la clé "myJsonName" qui identifie ce contenu-disposition particulier? Y a-t-il une autre façon de recevoir ces 2 contenus dans une seule requête HTTP multipart?

163voto

Vasiliy Faronov Points 3254

Si je vous comprends correctement, vous souhaitez composer manuellement une requête multipart à partir d'une console HTTP/REST. Le format multipart est simple; une brève introduction peut être trouvée dans la spécification HTML 4.01. Vous devez choisir une frontière, qui est une chaîne introuvable dans le contenu, disons HereGoes. Vous définissez l'en-tête de la requête Content-Type: multipart/form-data; boundary=HereGoes. Ensuite, cela devrait ê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

<...Contenu JPEG en base64...>
--HereGoes--

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X