servicio restful consumir consume java java-ee jersey

java - restful - Usando el cliente Jersey para hacer una operación POST



restful java (6)

En un método de Java, me gustaría usar un objeto de 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 usar el cliente para enviar los valores que se utilizarán como FormParam en el servidor. Puedo enviar parámetros de consulta sin problemas.


A partir de Jersey 2.x, la clase MultivaluedMapImpl se reemplaza por MultivaluedHashMap . Puede usarlo para agregar datos de 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 del formulario se envía en el formato de "application/x-www-form-urlencoded" .


Ahora es el primer ejemplo en la documentación de Jersey Client

Ejemplo 5.1. Solicitud POST con parámetros de formulario

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


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


Si necesita cargar un archivo, deberá usar 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);


También puedes probar esto:

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


Todavía no he hecho esto yo mismo, pero un poco de Google-Fu revela un consejo tecnológico en blogs.oracle.com con ejemplos de exactamente lo que pides.

Ejemplo tomado de la publicación 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);

Que cualquier ayuda?