2012-09-07 20 views
5

DESCARGO DE RESPONSABILIDAD: Hice una búsqueda exhaustiva de una respuesta a esta pregunta, y sí, encontré esta otra pregunta: https://stackoverflow.com/questions/10315728/how-to-send-parameters-as-formparam-to-webservice. Pero, en primer lugar, esa pregunta es acerca de Javascript, mientras pregunto por Java, y en segundo lugar, no tiene respuestas de todos modos. Así que a la pregunta ...¿Cómo puedo pasar un @FormParam a un servicio RESTful desde otro método?

Con los servicios RESTful, pasar @QueryParam s a un servicio es bastante fácil, ya que simplemente puede agregar pares de nombre/valor de variables a una URL y usarlos para acceder al servidor desde dentro del programa. ¿Hay alguna manera de hacer esto con @FormParam s también?

Por ejemplo, digamos que tengo el siguiente servicio REST:

@POST 
@Produces("application/xml") 
@Path("/processInfo") 
public String processInfo(@FormParam("userId") String userId, 
          @FormParam("deviceId") String deviceId, 
          @FormParam("comments") String comments) { 
    /* 
    * Process stuff and return 
    */ 
} 

... y digamos que también tengo otro método en otro lugar en mi programa como este:

public void updateValues(String comments) { 

    String userId = getUserId(); 
    String deviceId = getDeviceId(); 

    /* 
    * Send the information to the /processInfo service 
    */ 

} 

Cómo ¿Puedo realizar la acción comentada en el segundo método?

NOTA: Suponga que estos métodos no están en la misma clase o paquete. Supongamos también que el servicio RESTful está alojado en un servidor diferente de que la máquina desde la que ejecuta el método. Como tal, debe acceder al método y pasar los valores de forma RESTful.

¡Gracias por tu ayuda!

Respuesta

6

Usando @FormParam puede vincular los parámetros del formulario a una variable. Puede encontrar una muestra here.

En segundo lugar, para llamar al servicio de descanso internamente desde su código de método java, tendrá que utilizar el cliente de jersey. El código de ejemplo se puede encontrar here.

Puede pasar los parámetros del formulario usando el formulario jersey client de la siguiente manera.

Crear forma

ClientConfig config = new DefaultClientConfig(); 
Client client = Client.create(config); 
WebResource service = client.resource(UriBuilder.fromUri("http://localhost:8080/api").build()); 

Form f = new Form();  
f.add("userId", "foo");  
f.add("deviceId", "bar");  
f.add("comments", "Device"); 

pase al método reparador.

service.path("processInfo").accept(MediaType.APPLICATION_XML).post(String.class,f); 

reference

+1

Puede pasar parámetros de forma de este tipo, uso com.sun.jersey.api.representation.Form de la siguiente manera. Formulario f = new Form(); f.add ("userId", "foo"); f.add ("deviceId", "bar"); f.add ("comentarios", "Dispositivo"); // Interfaces fluidas service.path ("processInfo"). Accept (MediaType.APPLICATION_XML) .post (String.class, f); –

+0

¡Eso es genial! ¿Podría agregar eso a su respuesta y explicar la última línea un poco más? Este: 'service.path (" processInfo "). Accept (MediaType.APPLICATION_XML) .post (String.class, f)' Entonces lo acepto. :) – asteri

+1

Específicamente, ¿cuál es el objeto 'service' al que está invocando' path() '? – asteri

Cuestiones relacionadas