La URI especificada, es relativa a la ruta del recurso (especificada en la clase). Por ejemplo, la URI http://example.com/cantantes/ retornaría la lista de cantantes y la URI http://example.com/cantantes/13 retornaría la información relativa al cantante 13.
Se puede recuperar la información introducida con la anotación @PathParam
@Path("/holaMundo")
public class HolaMundo {
@GET
@Path("{id}")
@Produces("application/xml")
public String sayHolaXml(@PathParam("id") int id) {
return ""+id+" ";
}
}
Al especificar que el tipo es int, si la URI fuera /holaMundo/ABC, automáticamente se retornaria un HTTP 404.
La ruta especificada en @Path puede incluir expresiones para controlar los valores admitidos. En el siguiente ejemplo, únicamente se admiten números hasta 3 dígitos:
@Path("{id: [0-9]{1,3}}")
La anotación @QueryParam permite inyectar un parámetro de query String. Por defecto, los recursos se instancian para cada petición para evitar problemas de concurrencia y se pueden anotar argumentos de un método y variables de clase u objeto.
La anotación @DefaultValue asigna un valor por defecto a variables inyectadas con @PathParam o @QueryParam entre otras (@MatrixParam, @CookieParam, @FormParam, @HeaderParam)
@Path("/holaMundo")
public class HolaMundo {
@GET
public String sayHola(@QueryParam("p") @DefaultValue("sin valor") String p) {
return p;
}
}
Si ejecutamos el siguiente cliente:
Client client = Client.create();
WebResource holaResource = client.resource("http://localhost:8080/RestTest/resources/holaMundo/");
out.println(holaResource.get(String.class));
out.println(holaResource.queryParam("p", "Hola :)").get(String.class));
Nos dará como salida:
sin valor
Hola :)
Los parámetros POST se pueden inyectar con @FormParam
@Path("/holaMundoPost")
public class HolaMundoPost {
@POST
@Consumes("application/x-www-form-urlencoded")
public String sayHola(@FormParam("p") @DefaultValue("sin valor") String p) {
return p;
}
}
La anotación @Consumes permite especificar el tipo MIME que acepta el método. Si no se especifica se acepta cualquiera.
El cliente quedaría de la siguiente forma:
Client client = Client.create();
WebResource postResource = client.resource(
"http://localhost:8080/RestTest/resources/holaMundoPost/");
out.println(postResource.post(String.class));
MultivaluedMapformData = new MultivaluedMapImpl();
formData.add("p", "Hola Post:)");
out.println(postResource
.type("application/x-www-form-urlencoded")
.post(String.class, formData));
1 comentario:
Me preguntaba como hacer esto...
@Path("/holaMundo")
public class HolaMundo {
@GET
@Path("{id}")
@Produces("application/xml")
public String sayHolaXml(@PathParam("id") MyObjeto id) {
return ""+id+"";
}
}
Donde el parametro de entrada @PathParam sea un objeto propio.
Saludos y gracias
Publicar un comentario