@RepositoryRestResource. En nuestras aplicación probablemente querremos poder personalizar alguna URL (sobretodo de los métodos que nos hacemos con query methods de JPA), no permitir algunas operaciones (por ejemplo no dejar borrar un participante) o al menos no permitirlas para todos los usuarios (sólo podrá borrar el adminitrador).Vamos a ver cómo personalizar algunos de estos aspectos utilizando la anotación
@RestResource.En
ParticipanteDAO voy poner las siguientes líneas:@RestResource(path="nombre")
List<Participante> findByNombreIgnoreCaseContaining(String txt);
@RestResource(exported=false)
void deleteById(String id);
@RestResource(exported=false)
void delete(Participante entity);
// Mejor ponerselo a todo lo que tenga que aplicarse
// void deleteAll(Iterable<? extends Participante> entities);
// ...
Estas líneas hacen dos cosas:- Modifica la URL para que el fragmento del
pathdel primer método seanombre. - Prohibe el uso de
DELETEsobreParticipantes.
NOTA:
JpaRepository tiene 6 distintos métodos de borrado, formalmente y por rendimiento es mejor aplicar la anotación a todos ellos aunque con uno sólo sería suficiente. Aquí se indica pero no se ha hecho para ahorrar código.
Ahora quiero buscar un
Partido donde participe un idParticipante que le pase. Pongo esta línea en PartidoDAO:@RestResource(path="participante")
List<PartidoConId> findByIdLocalOrIdVisitante(@Param("idParticipante") String idLocal, @Param("idParticipante") String idVisitante);
Aquí utilizo además la anotación @Param. Esta anotación me permite enlazar un query parameter de la petición HTTP a un parámetro de mi método. La sintaxis del query method de JPA me va a obligar a tener tantos parámetros como vea que necesita su nombre (idLocal e idVisitante). Sin embargo puedo enlazar el mismo query parameter a los dos parámetros.Puedo encontrar estos enlaces en el path
/search de cada recurso.Puedes encontrar el código hasta aquí en su repositorio.
Esta entrada es muy corta pero ya se puede practicar mucho con ella. Propongo hacer los siguientes métodos de búsqueda y ponerles el nombre apropiado:
- Buscar sucesos por
iddeParticipante - Buscar sucesos entre un
Instantcomienzoy otrofin - Buscar sucesos para un
idParticipanteentrecomienzoyfin. Este método no se expondrá en la API. - Buscar sucesos después de un
Instant instant. El query param tendrá el nombrestart.
No hay comentarios:
Publicar un comentario