/recursos/:id.En el endpoint expuesto la entrada anterior sólo hemos usado query params. En esta ocasión vamos a pedir los sucesos de un participante entre dos fechas y el
id del participante estará en el path. La consulta ya está hecha en nuestro repositorio (SucesoDAO), pero no lo estamos exponiendo. Lo hicimos cuando vimos cómo personalizar rutas con @RestResource. Ésta anotación nos permitía cambiar el fragmento del path que se obtiene en /recursos/search e incluso personalizar los query params con @Param, pero no permite el uso de variables en el path. En este ejemplo queremos que el path sea /search/participante/{id}/entre-fechas.Para esto vamos a tener que seguir usando
@RequestMapping o cualquiera de sus variantes en un controlador. Como es una consulta sobre sucesos voy a crearme la clase SucesoController. El código se parece muchísimo al que vimos en la última sesión y queda así:@RepositoryRestController
@RequestMapping(path = "/sucesos/search")
public class SucesoController {
private SucesoDAO sucesoDAO;
SucesoController(SucesoDAO sucesoDAO) {
this.sucesoDAO = sucesoDAO;
}
@GetMapping("/participante/{id}/entre-fechas")
@ResponseBody
public CollectionModel<PersistentEntityResource> getSucesosConIdParticipanteEntreFechas(
@PathVariable("id") String id,
@RequestParam Instant comienzo, @RequestParam Instant fin,
PersistentEntityResourceAssembler assembler) {
List sucesos = sucesoDAO.findByIdParticipanteAndTemporalBetween(id, comienzo, fin);
return assembler.toCollectionModel(sucesos);
}
}
Me voy a centrar en lo nuevo. Si nos fijamos en el path aparece {id}. Cuando ponemos una parte del path entre llaves estamos indicando que se trata de una variable en el path y su nombre es el texto que hay dentro. Para hacer referencia a esa variable se usa @PathVariable pudiendo anotar un parámetro igual que hicimos con @RequestParam.Para poder usarlo desde la ruta
/sucesos/search nos toca modificar nuestro bean que procesa el recurso para búsquedas y añadirlo al código que ya tenemos para cuando el tipo gestionado sea SucesoConId. Esto empeora el mantenimiento así que, como lo prometido es deuda, en la siguiente entrada vamos a ver cómo añadir una configuración que nos descubra estos links personalizados automáticamente.Puedes conseguir el código hasta aquí en su repositorio.
No hay comentarios:
Publicar un comentario