58 votes

Utilisation du client Jersey pour effectuer une opération POST

Dans une méthode Java, j'aimerais utiliser un objet client Jersey pour effectuer une opération POST sur un service Web RESTful (également écrit avec Jersey), mais je ne sais pas comment utiliser le client pour envoyer les valeurs qui seront utilisées en tant que celles de FormParam. sur le serveur. Je suis capable d'envoyer des paramètres de requête très bien.

Merci d'avance.

87voto

Brabster Points 18764

Pas encore fait moi-même, mais un rapide coup d'oeil à Google-Fu révèle un conseil technique sur blogs.oracle.com avec des exemples de ce que vous demandez.

Exemple tiré de l'article de blog:

 MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
ClientResponse response = webResource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse.class, formData);
 

C'est une aide?

53voto

tonga Points 1765

À partir de Jersey 2.x, la classe MultivaluedMapImpl est remplacée par MultivaluedHashMap . Vous pouvez l'utiliser pour ajouter des données de formulaire et les envoyer au serveur:

     WebTarget webTarget = client.target("http://www.example.com/some/resource");
    MultivaluedMap<String, String> formData = new MultivaluedHashMap<String, String>();
    formData.add("key1", "value1");
    formData.add("key2", "value2");
    Response response = webTarget.request().post(Entity.form(formData));
 

Notez que l'entité de formulaire est envoyée au format "application/x-www-form-urlencoded" .

5voto

dimuthu Points 98

Si vous devez télécharger un fichier, vous devez utiliser MediaType.MULTIPART_FORM_DATA_TYPE. On dirait que MultivaluedMap ne peut pas être utilisé avec cela alors voici une solution avec FormDataMultiPart.

 InputStream stream = getClass().getClassLoader().getResourceAsStream(fileNameToUpload);

FormDataMultiPart part = new FormDataMultiPart();
part.field("String_key", "String_value");
part.field("fileToUpload", stream, MediaType.TEXT_PLAIN_TYPE);
String response = WebResource.type(MediaType.MULTIPART_FORM_DATA_TYPE).post(String.class, part);
 

2voto

RVelarde Points 19

Aussi, vous pouvez essayer ceci:

 MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
webResource.path("yourJerseysPathPost").queryParams(formData).post();
 

Meilleures salutations.

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