repositoryrestresource example data baeldung spring spring-mvc spring-data spring-data-rest spring-hateoas

spring - data - @repositoryrestresource example



Cuándo usar @RestController vs @RepositoryRestResource (3)

He estado buscando varios ejemplos de cómo usar Spring con REST. Nuestro objetivo final es una configuración Spring HATEOAS / HAL

He visto dos métodos distintos para renderizar REST en Spring

  1. A través de @RestController dentro de un controlador

  2. A través de @RepositoryRestResource dentro de un repositorio

Lo que estoy luchando por encontrar es por qué usarías uno sobre el otro. Al tratar de implementar HAL, ¿cuál es el mejor?

Nuestro backend de base de datos es Neo4j.


Bueno, las respuestas anteriores son correctas en su contexto, pero te doy ejemplos prácticos.

En muchos escenarios, como parte de la API, debemos proporcionar puntos finales para buscar una entidad según ciertos criterios. Ahora, al utilizar JPA, no tiene que escribir consultas, solo haga una interfaz y métodos con una nomenclatura específica de Spring-JPA. Para exponer dichas API, se creará una capa de servicio que simplemente llamaría a estos métodos de repositorio y, finalmente, a controladores que expondrán los puntos finales llamando a la capa de servicio.

Lo que Spring hizo aquí, le permite exponer estos puntos finales desde tales interfaces (repositorios) que generalmente son llamadas GET a la entidad de búsqueda y en segundo plano genera los archivos necesarios para crear puntos finales finales. Entonces, si está utilizando @RepositoryRestResource, entonces no es necesario crear la capa Service / Controller.

Por otro lado @RestController es un controlador que trata específicamente con los datos json y el trabajo de descanso como controlador. En resumen @Controller + @ResponseBody = @RestController.

Espero que esto ayude.

Vea mi ejemplo de trabajo y blog para el mismo:
http://sv-technical.blogspot.com/2015/11/spring-boot-and-repositoryrestresource.html
https://github.com/svermaji/Spring-boot-with-hibernate-no-controller


Hay una tercera (y cuarta) opción que no ha descrito, que es usar @BasePathAwareController o @RepositoryRestController, dependiendo de si está realizando acciones específicas de la entidad o no.

@RepositoryRestResource se usa para establecer opciones en la interfaz pública de repositorio; creará puntos finales automáticamente según el tipo de Repositorio que se esté ampliando (es decir, CrudRepository / PagingAndSortingRepository / etc).

@BasePathAwareController y @RepositoryRestController se usan cuando desea crear puntos finales manualmente, pero desea utilizar las configuraciones REST de Spring Data que ha configurado.

Si usa @RestController, creará un conjunto paralelo de puntos finales con diferentes opciones de configuración, es decir, un convertidor de mensajes diferente, diferentes manejadores de errores, etc., pero estarán encantados de coexistir (y probablemente causen confusión).

La documentación específica se puede encontrar here .


Ok, entonces la historia corta es que quiere usar @RepositoryRestResource ya que esto crea un servicio HATEOAS con Spring JPA. Como puede ver here agregar esta anotación y vincularla a su Pojo, tiene un servicio HATEOAS totalmente funcional sin tener que implementar el método de repositorio o los métodos de servicio REST.

Si agrega el @RestController, debe implementar cada método que desee exponer por su cuenta y también no lo exporta a un formato HATEOAS.