2011-09-22 19 views
14

Estoy creando un servicio web tranquilo y quería saber cómo creamos un servicio con parámetros de entrada y también cómo invocarlo desde un navegador web.¿Cómo crear un servicio web tranquilo con parámetros de entrada?

Por ejemplo

@Path("/todo") 
public class TodoResource { 
    // This method is called if XMLis request 
    @PUT 
    @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) 
    public Todo getXML() { 
     Todo todo = new Todo(); 
     todo.setSummary("This is my first todo"); 
     todo.setDescription("This is my first todo"); 
     return todo; 
    } 

y puedo invocarlo usando http://localhost:8088/JerseyJAXB/rest/todo

y quiero crear un método como

@Path("/todo") 
    public class TodoResource { 
     // This method is called if XMLis request 
     @PUT 
     @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) 
     public Todo getXML(String x, String y) { 
      Todo todo = new Todo(); 
      todo.setSummary(x); 
      todo.setDescription(y); 
      return todo; 
     } 

En caso de servicios web basados ​​en jabón i invocaría es así

http://localhost:8088/JerseyJAXB/rest/todo?x=abc&y=pqr

pero quiero saber cómo invocarlo utilizando el resto y también puedo pasar los parámetros como lo estoy haciendo en el ejemplo anterior cuando uso descanso y maillot.

Respuesta

34

Puedes. Pruebe algo como esto:

@Path("/todo/{varX}/{varY}") 
@Produces({"application/xml", "application/json"}) 
public Todo whatEverNameYouLike(@PathParam("varX") String varX, 
    @PathParam("varY") String varY) { 
     Todo todo = new Todo(); 
     todo.setSummary(varX); 
     todo.setDescription(varY); 
     return todo; 
} 

luego llame a su servicio con este URL;
http://localhost:8088/JerseyJAXB/rest/todo/summary/description

2

Cuidado. Para esto necesitas @GET (no @PUT).

10

Si quiere parámetros de consulta, usa @QueryParam.

public Todo getXML(@QueryParam("summary") String x, 
        @QueryParam("description") String y) 

Pero no podrá enviar un PUT desde un navegador web sencillo (hoy). Si escribe la URL directamente, será un GET.

Filosóficamente, esto parece que debería ser un POST. En REST, normalmente POST a un recurso común, /todo, donde ese recurso crea y devuelve un nuevo recurso, o lo PONE en un recurso específicamente identificado, como /todo/<id>, para su creación y/o actualización.

+1

Responda mejor direcciones los parámetros de URL mencionados en la pregunta original. Si los parámetros o los elementos de ruta son mejores para este propósito es otra cuestión. –

+0

¡Brillante! Esto funcionó para mí. ¡Gracias! – Najeeb

10

En JAX-RS Las siguientes anotaciones para extraer los valores de entrada enviados por el cliente.

  1. @PathParam
  2. @QueryParam
  3. @MatrixParam
  4. @FormParam

@PathParam Sintaxis URL

http://localhost:7001//descanso/clientes/100/Java4s

@QueryParam URL Sintaxis

http://localhost:7001/ .../descanso/clientes?CustNo = 100 & custname = Java4s

@MatrixParam Sintaxis URL

http://localhost:7001/ .../rest/clientes; CustNo = 100; custname = Java4s

@FormParam Sintaxis URL

Si tenemos un formulario HTML que tiene dos campos de entrada y botón de enviar. Permite al cliente ingresar esos detalles y enviarlos al servicio web RESTful. Luego, el servicio de descanso extraerá esos detalles utilizando esta anotación @FormParam.

0

Puede probar este ... parámetros puestos como:
http://localhost:8080/WebApplication11/webresources/generic/getText?arg1=hello en su navegador ...

package newpackage; 

import javax.ws.rs.core.Context; 
import javax.ws.rs.core.UriInfo; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.DefaultValue; 


import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PUT; 
import javax.ws.rs.QueryParam; 

@Path("generic") 
public class GenericResource { 

    @Context 
    private UriInfo context; 

    /** 
    * Creates a new instance of GenericResource 
    */ 
    public GenericResource() { 
    } 

    /** 
    * Retrieves representation of an instance of newpackage.GenericResource 

    * @return an instance of java.lang.String 
    */ 
    @GET 
    @Produces("text/plain") 
    @Consumes("text/plain") 
    @Path("getText/") 
    public String getText(@QueryParam("arg1") 
      @DefaultValue("") String arg1) { 

     return arg1 ; } 

    @PUT 
    @Consumes("text/plain") 
    public void putText(String content) { 





    } 
} 
0

otra manera de hacer es conseguir la UriInfo lugar de todos los QueryParam

Entonces usted podrá obtener la queryParam según sea necesario en su código

@GET 
@Path("/query") 
public Response getUsers(@Context UriInfo info) { 

    String param_1 = info.getQueryParameters().getFirst("param_1"); 
    String param_2 = info.getQueryParameters().getFirst("param_2"); 


    return Response ; 

} 
Cuestiones relacionadas