diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml
index 299115634e..5b5b006d01 100644
--- a/spring-cloud/pom.xml
+++ b/spring-cloud/pom.xml
@@ -12,6 +12,7 @@
spring-cloud-hystrix
spring-cloud-bootstrap
spring-cloud-ribbon-client
+ spring-cloud-rest
pom
diff --git a/spring-cloud/spring-cloud-rest/.gitignore b/spring-cloud/spring-cloud-rest/.gitignore
new file mode 100644
index 0000000000..2af7cefb0a
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/.gitignore
@@ -0,0 +1,24 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+nbproject/private/
+build/
+nbbuild/
+dist/
+nbdist/
+.nb-gradle/
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-rest/pom.xml b/spring-cloud/spring-cloud-rest/pom.xml
new file mode 100644
index 0000000000..fef6d93cfc
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/pom.xml
@@ -0,0 +1,43 @@
+
+
+ 4.0.0
+
+ org.baeldung
+ spring-cloud-rest
+ 1.0.0-SNAPSHOT
+
+ spring-cloud-rest-server
+ spring-cloud-rest-client
+
+ pom
+
+ spring-cloud-rest
+
+
+ UTF-8
+ 3.6.0
+ 1.4.2.RELEASE
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ 1.8
+ 1.8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot-maven-plugin.version}
+
+
+
+
+
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/pom.xml b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/pom.xml
new file mode 100644
index 0000000000..824e17e59c
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/pom.xml
@@ -0,0 +1,78 @@
+
+
+ 4.0.0
+
+ org.baeldung
+ spring-cloud-rest-client
+ 0.0.1-SNAPSHOT
+ jar
+
+ spring-cloud-rest
+ Demo project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.4.3.RELEASE
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-eureka
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.h2database
+ h2
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-data-rest
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Camden.SR4
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/java/org/baeldung/SpringCloudRestClientApplication.java b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/java/org/baeldung/SpringCloudRestClientApplication.java
new file mode 100644
index 0000000000..a13aaa54bc
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/java/org/baeldung/SpringCloudRestClientApplication.java
@@ -0,0 +1,14 @@
+package org.baeldung;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+
+@SpringBootApplication
+@EnableEurekaClient
+public class SpringCloudRestClientApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringCloudRestClientApplication.class, args);
+ }
+}
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/java/org/baeldung/persistence/dao/BookRepository.java b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/java/org/baeldung/persistence/dao/BookRepository.java
new file mode 100644
index 0000000000..419c735d63
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/java/org/baeldung/persistence/dao/BookRepository.java
@@ -0,0 +1,10 @@
+package org.baeldung.persistence.dao;
+
+import org.baeldung.persistence.model.Book;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.rest.core.annotation.RepositoryRestResource;
+
+@RepositoryRestResource(collectionResourceRel = "books", path = "books")
+public interface BookRepository extends JpaRepository {
+
+}
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/java/org/baeldung/persistence/model/Book.java b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/java/org/baeldung/persistence/model/Book.java
new file mode 100644
index 0000000000..69d217b096
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/java/org/baeldung/persistence/model/Book.java
@@ -0,0 +1,138 @@
+package org.baeldung.persistence.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+@Entity
+public class Book {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long id;
+
+ @Column(nullable = false)
+ private String title;
+
+ @Column(nullable = false)
+ private String isbn;
+
+ @Column(nullable = false)
+ private String author;
+
+ //
+
+ public Book() {
+ super();
+ }
+
+ public Book(String title, String isbn, String author) {
+ super();
+ this.title = title;
+ this.isbn = isbn;
+ this.author = author;
+ }
+
+ //
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getIsbn() {
+ return isbn;
+ }
+
+ public void setIsbn(String isbn) {
+ this.isbn = isbn;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+ //
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = (prime * result) + ((author == null) ? 0 : author.hashCode());
+ result = (prime * result) + (int) (id ^ (id >>> 32));
+ result = (prime * result) + ((isbn == null) ? 0 : isbn.hashCode());
+ result = (prime * result) + ((title == null) ? 0 : title.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final Book other = (Book) obj;
+ if (author == null) {
+ if (other.author != null) {
+ return false;
+ }
+ } else if (!author.equals(other.author)) {
+ return false;
+ }
+ if (id != other.id) {
+ return false;
+ }
+ if (isbn == null) {
+ if (other.isbn != null) {
+ return false;
+ }
+ } else if (!isbn.equals(other.isbn)) {
+ return false;
+ }
+ if (title == null) {
+ if (other.title != null) {
+ return false;
+ }
+ } else if (!title.equals(other.title)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("Book [id=")
+ .append(id)
+ .append(", title=")
+ .append(title)
+ .append(", isbn=")
+ .append(isbn)
+ .append(", author=")
+ .append(author)
+ .append("]");
+ return builder.toString();
+ }
+
+}
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/resources/application.properties b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/resources/application.properties
new file mode 100644
index 0000000000..45100d4788
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/main/resources/application.properties
@@ -0,0 +1,9 @@
+spring.application.name=spring-cloud-eureka-client
+server.port=0
+eureka.client.serviceUrl.defaultZone=${EUREKA_URI:http://localhost:8761/eureka}
+eureka.instance.preferIpAddress=true
+
+spring.datasource.driver-class-name=org.h2.Driver
+spring.datasource.url=jdbc:h2:mem:cloud_rest;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
+spring.datasource.username=sa
+spring.datasource.password=
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/test/java/org/baeldung/SpringCloudRestClientApplicationTests.java b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/test/java/org/baeldung/SpringCloudRestClientApplicationTests.java
new file mode 100644
index 0000000000..c16adfbb34
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-client/src/test/java/org/baeldung/SpringCloudRestClientApplicationTests.java
@@ -0,0 +1,16 @@
+package org.baeldung;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class SpringCloudRestClientApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/.gitignore b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/.gitignore
new file mode 100644
index 0000000000..2af7cefb0a
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/.gitignore
@@ -0,0 +1,24 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+nbproject/private/
+build/
+nbbuild/
+dist/
+nbdist/
+.nb-gradle/
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/.mvn/wrapper/maven-wrapper.properties b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000000..c954cec91c
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1 @@
+distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/pom.xml b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/pom.xml
new file mode 100644
index 0000000000..e513b2d0c4
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/pom.xml
@@ -0,0 +1,63 @@
+
+
+ 4.0.0
+
+ org.baeldung
+ spring-cloud-rest-server
+ 0.0.1-SNAPSHOT
+ jar
+
+ spring-cloud-rest-server
+ Spring Cloud REST server
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.4.3.RELEASE
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ Camden.SR4
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-eureka-server
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/src/main/java/org/baeldung/SpringCloudRestServerApplication.java b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/src/main/java/org/baeldung/SpringCloudRestServerApplication.java
new file mode 100644
index 0000000000..2845ccf961
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/src/main/java/org/baeldung/SpringCloudRestServerApplication.java
@@ -0,0 +1,14 @@
+package org.baeldung;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
+
+@SpringBootApplication
+@EnableEurekaServer
+public class SpringCloudRestServerApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringCloudRestServerApplication.class, args);
+ }
+}
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/src/main/resources/application.properties b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/src/main/resources/application.properties
new file mode 100644
index 0000000000..2c7dfa193e
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/src/main/resources/application.properties
@@ -0,0 +1,3 @@
+server.port=8761
+eureka.client.registerWithEureka=false
+eureka.client.fetchRegistry=false
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/src/test/java/org/baeldung/SpringCloudRestServerApplicationTests.java b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/src/test/java/org/baeldung/SpringCloudRestServerApplicationTests.java
new file mode 100644
index 0000000000..b5636c32d3
--- /dev/null
+++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-server/src/test/java/org/baeldung/SpringCloudRestServerApplicationTests.java
@@ -0,0 +1,15 @@
+package org.baeldung;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class SpringCloudRestServerApplicationTests {
+ @Test
+ public void contextLoads() {
+ }
+
+}