Step 1: Create new maven project ‘springDataRest’.
Open
Eclipse.
File ->
New -> Other.
Search for
Maven.
Select
‘Maven Project’.
Click on
Next button.
Select
check box ‘Create a simple project (skip archetype selection)’.
Give Group
Id, Artifact Id as ‘springDataRest’ and version as 1.
Click on
Finish button.
Step 2:
Update pom.xml with
maven dependencies.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>springDataRest</groupId>
<artifactId>springDataRest</artifactId>
<version>1</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
</dependencies>
</project>
Since I
want to use H2 embedded database, I added h2 dependency.
Step 3:
Create
‘application.properties’ file under src/main/resources.
application.propertieslogging.level.root=WARN logging.level.org.hibernate=ERROR ## H2 specific properties spring.h2.console.enabled=true spring.h2.console.path=/h2 spring.datasource.url=jdbc:h2:file:~/db/myOrg.db;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1; spring.datasource.username=krishna spring.datasource.password=password123 spring.datasource.driverClassName=org.h2.Driver ## JPA specific properties # Creates the schema, destroying previous data. spring.jpa.hibernate.ddl-auto=create spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true ## Database connection pooling properties # Number of ms to wait before throwing an exception if no connection is available. spring.datasource.max-wait=10000 # Maximum number of active connections that can be allocated from this pool at the same time. spring.datasource.tomcat.max-active=10 spring.datasource.tomcat.max-idle=5 spring.datasource.tomcat.min-idle=3
Step 4:
Create a package
‘com.sample.app.model’ and define Employee class like below.
Employee.java
package com.sample.app.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String firstName;
private String lastName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Step 5:
Create a package ‘com.sample.app.repository’
and define EmployeeRepository interface like below.
package com.sample.app.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.sample.app.model.Employee;
public interface EmployeeRepository extends JpaRepository<Employee, Integer>{
}
Step 6:
Define App.java class
in com.sample.app package.
package com.sample.app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
Total
project structure look like below.
Run
App.java, you can see below messages in console.
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.6.RELEASE)
Hibernate:
drop table employee if exists
Hibernate:
drop sequence if exists hibernate_sequence
Hibernate: create sequence hibernate_sequence start with 1 increment by 1
Hibernate:
create table employee (
id integer not null,
first_name varchar(255),
last_name varchar(255),
primary key (id)
)
2019-07-10 09:33:55.156 WARN 11020 --- [ main] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
Open the url ‘http://localhost:8080/’
in browser, you can see all the REST endpoints exposed by spring data REST.
At the
root of a Spring Data REST app is a profile link. It is used to explain the
application semantics of a document with an application-agnostic media type
(such as HTML, HAL, Collection+JSON, Siren, etc.)
Open the
URL 'http://localhost:8080/profile/employees' to get the semantics of employees
resource.
{
"alps": {
"version": "1.0",
"descriptor": [
{
"id": "employee-representation",
"href": "http://localhost:8080/profile/employees",
"descriptor": [
{
"name": "firstName",
"type": "SEMANTIC"
},
{
"name": "lastName",
"type": "SEMANTIC"
}
]
},
{
"id": "create-employees",
"name": "employees",
"type": "UNSAFE",
"rt": "#employee-representation"
},
{
"id": "get-employees",
"name": "employees",
"type": "SAFE",
"descriptor": [
{
"name": "page",
"type": "SEMANTIC",
"doc": {
"format": "TEXT",
"value": "The page to return."
}
},
{
"name": "size",
"type": "SEMANTIC",
"doc": {
"format": "TEXT",
"value": "The size of the page to return."
}
},
{
"name": "sort",
"type": "SEMANTIC",
"doc": {
"format": "TEXT",
"value": "The sorting criteria to use to calculate the content of the page."
}
}
],
"rt": "#employee-representation"
},
{
"id": "update-employee",
"name": "employee",
"type": "IDEMPOTENT",
"rt": "#employee-representation"
},
{
"id": "patch-employee",
"name": "employee",
"type": "UNSAFE",
"rt": "#employee-representation"
},
{
"id": "delete-employee",
"name": "employee",
"type": "IDEMPOTENT",
"rt": "#employee-representation"
},
{
"id": "get-employee",
"name": "employee",
"type": "SAFE",
"rt": "#employee-representation"
}
]
}
}
Create
an employee
Method:
POST
API:
http://localhost:8080/employees
Body:
{
"firstName" :
"Bhadri",
"lastName" :
"Narayana"
}
Once you
hit above request, you can see below response.
{
"firstName": "Bhadri",
"lastName": "Narayana",
"_links": {
"self": {
"href": "http://localhost:8080/employees/1"
},
"employee": {
"href": "http://localhost:8080/employees/1"
}
}
}
Get all
the employees
Method:
GET
API:
http://localhost:8080/employees
Once you
hit above request, you can see below kind of response.
{
"_embedded": {
"employees": [
{
"firstName": "Bhadri",
"lastName": "Narayana",
"_links": {
"self": {
"href": "http://localhost:8080/employees/1"
},
"employee": {
"href": "http://localhost:8080/employees/1"
}
}
}
]
},
"_links": {
"self": {
"href": "http://localhost:8080/employees{?page,size,sort}",
"templated": true
},
"profile": {
"href": "http://localhost:8080/profile/employees"
}
},
"page": {
"size": 20,
"totalElements": 1,
"totalPages": 1,
"number": 0
}
}
Get
specific employee details
Method:
GET
API:
http://localhost:8080/employees/1
Above
request return employee information for the id 1.
{
"firstName": "Bhadri",
"lastName": "Narayana",
"_links": {
"self": {
"href": "http://localhost:8080/employees/1"
},
"employee": {
"href": "http://localhost:8080/employees/1"
}
}
}
Just like
above, you can perform other HTTP requests like PUT, DELETE etc.,
You can
download complete working application from this link.
No comments:
Post a Comment