2010-01-25 10 views
47

In un metodo Java, mi piacerebbe utilizzare un oggetto client Jersey per eseguire un'operazione POST su un servizio Web RESTful (anch'esso scritto utilizzando Jersey) ma non sono sicuro di come utilizzare il client per inviare i valori che verranno utilizzati come FormParam sul server. Sono in grado di inviare parametri di query bene.Utilizzo del client Jersey per eseguire un'operazione POST

Grazie in anticipo.

risposta

70

Non ancora fatto, ma un po 'di Google-Fu rivela uno tech tip on blogs.oracle.com con esempi di esattamente quello che chiedi.

esempio tratto dal post del 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); 

Quello di aiuto?

+2

Link è operativa in questo momento convertire – orique

2

Inoltre si può provare questo:

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

Se avete bisogno di fare un caricamento di file, è necessario utilizzare MediaType.MULTIPART_FORM_DATA_TYPE. Sembra che MultivaluedMap non possa essere usato con quello quindi ecco una soluzione con 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); 
33

A partire da Jersey 2.x, la classe MultivaluedMapImpl è sostituito dal MultivaluedHashMap. Si può usare per aggiungere i dati del modulo e inviarlo al server:

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)); 

Nota che l'entità modulo viene inviato nel formato "application/x-www-form-urlencoded".

2

più semplice:

Form form = new Form(); 
form.add("id", "1");  
form.add("name", "supercobra"); 
ClientResponse response = webResource 
    .type(MediaType.APPLICATION_FORM_URLENCODED_TYPE) 
    .post(ClientResponse.class, form); 
12

Ora è il primo esempio al Jersey Client documentation

Esempio 5.1. richiesta POST con i parametri di forma

Client client = ClientBuilder.newClient(); 
WebTarget target = client.target("http://localhost:9998").path("resource"); 

Form form = new Form(); 
form.param("x", "foo"); 
form.param("y", "bar"); 

MyJAXBBean bean = 
target.request(MediaType.APPLICATION_JSON_TYPE) 
    .post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE), 
     MyJAXBBean.class); 
+0

fa Jersey cliente automaticamente il tipo di ritorno in 'MyJAXBBean.class'? Come ottenere questo? – DerekY

+0

L'ultimo parametro della catena di chiamate è una classe che dice a Jersey di associare il contenuto della risposta a un oggetto MyJAXBBean. Puoi anche mapparlo a una stringa e deserializzarlo con uno strumento di tua scelta. – otonglet

Problemi correlati