Path params con @PathParam

JAX-RS Path params con @PathParams

Por increíble que parezca, en REST la URL puede proporcionar una de las principales fuentes de información para los servicios, pues es posible definir como parámetros de entrada ciertas parte de la URL, lo que nos permite en primer lugar, crear métodos especiales para atender ciertas URL, pero por otra parte, esos fragmentos de URL pueden ser inyectados como parámetros a los métodos Java.

NOTA: Este artículo pertenece a una guia completa para aprender a crear un API REST con el API de JAX-RS de Java, ve el índice completo aquí.


Hace unos días escribía sobre la forma de escribir los Path y como podemos como podemos podíamos definir parámetros con la anotación @Path, puede regresara a la sección Introducción a las URL con @Path si quieres tener un poco más de contexto sobre lo que estaremos hablando esta sección.

Definiendo un Path Param

No vamos a entrar en mucho detalle sobre como definir un parámetro desde @Path pues ya lo explicamos en una sección pasado, pero si repasaremos como se hacia. 

@GET
@Path("/users/{userId}")
public Response findUserById(long userId) {}


Como podemos apreciar en el fragmento de código anterior, es posible definir ciertas secciones de una URL como parámetros, encerrando entre llaves ({userId}) la parte que queremos recuperar como parámetro desde Java. 

Recuperar una Path Param con @PathParam

Ya que hemos definido todas secciones de parámetros dentro del @Path, lo que seguirá es recuperarlos desde el método Java para poderlos utilizar, para ello, debemos de establecer la anotación @PathParam en cada uno de los parámetros del método Java sobre el cual queremos inyectar el valor.

@GET
@Path("/users/{userId}")
public Response findUserById(@PathParam("userId") long user) {
    System.out.println("UserID ==> " + user);
}


En el fragmento de código anterior, podemos apreciar como hemos establecido la anotación @PathParam para el parámetro user, el cual será inyectado con el valor del parámetro userId del @Path.

Recuperar un Path param mediante UriInfo

La segunda forma de recuperar un Path param es mediante la interface UriInfo, la cual es una interface que contiene todos los metadatos relacionados con la URL. Al ser una interface no puede ser instanciada, por lo que deberá ser inyectada para ser utilizada, vamos como sería:

@GET
@Path("uriInfo/{param1}")
public Response getUriInfo(@Context UriInfo uriInfo) {
    String param1 = uriInfo.getPathParameters().getFirst("param1");
    return Response.ok(param1).build();
}


La interface UriInfo proporciona el método getPathParameters que retorna una subclase de la interface java.util.Map con todos los parámetros, por lo que podemos iterar el nombre de los parámetros y sus valores, o podemos buscar directamente el valor de un parámetro mediante el método getFist
Al ejecutar el método anterior deberíamos tener como resultado el valor del parámetro param1, vamos el resultado:

Conclusiones

Los Path params son indispensables para definir de forma clara los recursos de tu API, pues evita tener que agregar parámetros de tipo Query, los cuales hacen que las URL sean complejas y difíciles de recordar, ademas de que no son agradables para SEO.


One thought to “Path params con @PathParam”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *