2010-01-25 16 views
47

En un método Java, me gustaría usar un objeto cliente Jersey para hacer una operación POST en un servicio web RESTful (también escrito usando Jersey) pero no estoy seguro de cómo usarlo el cliente para enviar los valores que se utilizarán como FormParam en el servidor. Puedo enviar parámetros de consulta sin problemas.Usando el cliente Jersey para hacer una operación POST

Gracias de antemano.

Respuesta

70

No he hecho esto todavía, pero un poco de Google-Fu revela un tech tip on blogs.oracle.com con ejemplos de exactamente lo que usted solicita.

Ejemplo tomado de la entrada 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); 

Eso ayuda?

+2

Enlace es operativo en este momento convertir – orique

2

También puede probar esto:

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

Si necesita hacer una carga de archivos, tendrá que utilizar MediaType.MULTIPART_FORM_DATA_TYPE. Parece que MultivaluedMap no se puede usar con eso, así que aquí hay una solución 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 partir de Jersey 2.x, la clase MultivaluedMapImpl se sustituye por MultivaluedHashMap. Se puede utilizar para agregar los datos del formulario y enviarlo al servidor:

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

Tenga en cuenta que la entidad forma se envía en el formato de "application/x-www-form-urlencoded".

2

más simple:

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

Ahora es el primer ejemplo en el Jersey Client documentation

Ejemplo 5.1. petición POST con parámetros de 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

cliente hace Jersey automáticamente el tipo de retorno en 'MyJAXBBean.class'? ¿Cómo lograr esto? – DerekY

+0

El último parámetro de la cadena de llamada es una clase que indica a Jersey que asigne el contenido de la respuesta a un objeto MyJAXBBean. También puede asignarlo a una cadena y deserializarlo con la herramienta que elija. – otonglet

Cuestiones relacionadas