I have been looking at various examples of how to use Spring with REST. Our end target is a Spring HATEOAS/HAL
setup
I have seen two distinct methods for rendering REST within Spring
Via @RestController
within a Controller
Via @RepositoryRestResource
within a Repository
The thing I am struggling to find is why would you use one over the other. When trying to implement HAL
which is best?
Our database backend is Neo4j.
RestController: RestController is used for making restful web services with the help of the @RestController annotation. This annotation is used at the class level and allows the class to handle the requests made by the client.
Real-world applications should avoid using Spring Data REST because the entities are exposed as RESTful Services. The two most critical considerations in designing a RESTful service are the domain model and the consumers.
Spring RestController annotation is used to create RESTful web services using Spring MVC. Spring RestController takes care of mapping request data to the defined request handler method. Once response body is generated from the handler method, it converts it to JSON or XML response.
If you need to be fast and want to write the minimal amount of code go for spring data rest. A spring alternative to spring-data-rest is using spring MVC directly to create a REST API on your own. Spring-data-jpa would still be used to implement the data access layer.
Ok, so the short story is that you want to use the @RepositoryRestResource
since this creates a HATEOAS service with Spring JPA.
As you can see here adding this annotation and linking it to your Pojo you have a fully functional HATEOAS service without having to implement the repository method or the REST service methods
If you add the @RestController
then you have to implement each method that you want to expose on your own and also it does not export this to a HATEOAS format.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With