Most of the time you'll need to write your own endpoints for adding validations etc. But for testing the entities or when we need to try something it is good tool.
First we need to create Spring Boot project and add spring-data-rest as maven dependency to pom.xml file
org.springframework.boot spring-boot-starter-parent 1.3.0.RELEASE org.springframework.boot spring-boot-starter-data-rest mysql mysql-connector-java runtime
Let's create basic Entity
import javax.persistence.*; @Entity public class Customer { @GeneratedValue(strategy = GenerationType.IDENTITY) @Id private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Spring Data's JpaRepository interface adds CRUD operations without adding any code. Spring Data REST will use this repository to generate REST endpoints.
@Repository public interface CustomerRepository extends JpaRepository<Customer, Long> { }
Then all we need to do is add @EnableJpaRepositories annotation
@EnableJpaRepositories @SpringBootApplication public class SpringDataRestDemo { public static void main(String[] args) { SpringApplication.run(SpringDataRestDemo.class, args); } }
When you start the application at the root of your url you'll see HATEOS supported endpoints response like below. You can make GET/POST/DELETE/PATCH/PUT requests to this endpoints.
{ "_links": { "customers": { "href": "http://localhost:8080/customers{?page,size,sort}", "templated": true }, "profile": { "href": "http://localhost:8080/profile" } } }
Let's check the customers
{ "_embedded": { "customers": [ { "name": "ugur", "_links": { "self": { "href": "http://localhost:8080/customers/1" }, "customer": { "href": "http://localhost:8080/customers/1" } } }, { "name": "Luke", "_links": { "self": { "href": "http://localhost:8080/customers/2" }, "customer": { "href": "http://localhost:8080/customers/2" } } } ] }, "_links": { "self": { "href": "http://localhost:8080/customers" }, "profile": { "href": "http://localhost:8080/profile/customers" } }, "page": { "size": 20, "totalElements": 2, "totalPages": 1, "number": 0 } }
{ "name": "Luke", "_links": { "self": { "href": "http://localhost:8080/customers/2" }, "customer": { "href": "http://localhost:8080/customers/2" } } }