/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