J'ai besoin de recevoir un HTTP Post Multipart qui ne contient que 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 à l'aide de la console Chrome REST, je me demande donc si la bonne solution est de définir une clé «étiquette» pour le paramètre JSON et le fichier binaire.
Du côté du serveur, j'utilise Resteasy 2.x, et je vais lire le corps de 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 la voie à suivre? Est-il correct de récupérer ma chaîne JSON à l'aide de 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
Réponses:
Si je vous comprends bien, vous souhaitez composer une requête en plusieurs parties manuellement à 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 trouver une limite, qui est une chaîne introuvable dans le contenu, disons
HereGoes
. Vous définissez l'en-tête de la demandeContent-Type: multipart/form-data; boundary=HereGoes
. Ensuite, cela devrait être un corps de requête valide:la source
\*
par exemple ne devrait-il pas fonctionner comme une limite? Il n'est pas permis d'exister dans json ou base64.