6 de mayo de 2020

Código útil: clase ConfiguracionRest

Como hemos visto en las entradas anteriores, hemos añadido un link a un método personalizado pero de una manera muy manual y nos tocaría añadir otro más. No obstante, el código que se ha utilizado puede generalizarse más teniendo en cuenta lo siguiente:
  1. Los métodos que queremos enlazar tienen la anotación @ResponseBody
  2. Los parámetros que deben formar parte del path los anotaremos con @PathVariable.
  3. Los parámetros que deben formar parte de la query string los anotaremos con @RequestParam.
  4. Podemos configurar a qué recursos queremos añadirles enlaces en su /recursos/search y relacionarlas con su RecursoController que tenga los métodos a los que queremos enlazar.
Siguiendo esa guía podemos usar Reflection para conseguir toda la información y añadir los enlaces haciendo que:
  1. Filtre el recurso para el que debe añadirse los links (sólo los registrados)
  2. Recupere todos los métodos del Controller asociado a ese recurso
  3. Filtre aquellos marcados con ResponseBody
  4. Recupere el link con linkTo pasando como argumentos el valor "(" + nombre + ")" para cada PathVariable (se usan paréntesis para evitar el "escape" de las llaves)
  5. Cambiamos los paréntesis por llaves en las variables de la ruta.
  6. Utilice sólo los nombres de los parámetros RequestParam como query params
  7. Use el nombre del método como rel
El código está en el gist para la clase ConfiguracionRest:

También incluye un filtro CORS (CorsFilter) para permitir cualquier petición y así poder realizar pruebas sin preocuparse de las políticas Cross-Origin por defecto.

Cómo usar el bean correctamente

En nuestro repositorio vamos a eliminar el código de la sesión anterior para sustituirlo por esta clase de configuración que añadimos a nuestra aplicación.

Ahora personalizamos nuestro bean para los links añadiendo al mapa de controladores para enlazar la entidad como clave (PartidoConId.class) y el controlador asociado como valor (PartidoController.class). De aquí se deduce que lo más simple es poner todos los métodos para una entidad en un único Controller.

Si se quieren añadir otros enlaces aparte de los aporta este bean, se puede crear otro bean del mismo tipo en otra clase de configuración y al final todos los enlaces convivirán en el mismo /search.

Puedes encontrar el código hasta aquí en su repositorio.

Este punto finaliza nuestro Producto Mínimo Viable (PMV/MVP) y establece la release v1.0.0. En el README del repositorio se pueden ver las instrucciones para ejecutar la API en local.

No hay comentarios:

Publicar un comentario

Compárteme

Entradas populares