in this blog, creating custom rest API. Rest API that means use Rest Controller @RestController on Configuration class. for the view, we use the Postman tool . where we testing our request and response generated by URL. Here showing the development process one by one.
HTTP Method | Url Mapping | CRUD Action |
---|---|---|
POST | localhost:1234/code4devops/api/employee | Create a new employee |
GET | localhost:1234/code4devops/api/employees | Read a list of employees |
GET | localhost:1234/code4devops/api/employee/{employeeId} | Read a single employee |
PUT | localhost:1234/code4devops/api/employee | Update an exiting employee |
DELETE | localhost:1234/code4devops/api/employee/{employeeId} | Delete an existing employee |
POM.XML
<?xml version="1.0" encoding="UTF-8"?> <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>com.code4devops</groupId> <artifactId>jpacrud</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>jpacrud</name> <description>project for Spring Boot</description> <!-- lookup parent from repository --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Note: write some database information in appliction.properties
appliction.properties
# JDBC properties spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect spring.datasource.url=jdbc:mysql://localhost:3306/springbootshweta?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root #spring.jpa.hibernate.ddl-auto=create spring.jpa.hibernate.ddl-auto=update # show the hibernate query in sql format spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true server.servlet.context-path=/code4devops server.port=1234
Employee.java
package com.code4devops.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "employee_jpa") public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", length = 10, nullable = false) private int id; @Column(name = "customer_fname", length = 45, nullable = true) private String firstName; @Column(name = "last_name", length = 45, nullable = true) private String lastName; @Column(name = "email", length = 45, nullable = true) private String email; @Column(name = "mobile", length = 45, nullable = true) private String mobile; @Column(name = "aadhar_number", length = 45, nullable = true) private String aadharNumber; public Employee() {} public Employee(int id, String firstName, String lastName, String email, String mobile, String aadharNumber) { this.id = id; this.firstName = firstName; this.lastName = lastName; this.email = email; this.mobile = mobile; this.aadharNumber = aadharNumber; } //create getter and setter for all Instance Variable @Override public String toString() { return id + " " + firstName + " " + lastName + " " + email+ " " + mobile + " " + aadharNumber; } }
EmployeeDAO.java
package com.code4devops.dao; import java.util.List; import com.code4devops.entity.Employee; public interface EmployeeDAO { public List<Employee> findAll(); public Employee findById(int theId); public void save(Employee theEmployee); public void deleteById(int theId); }
EmployeeDAOJpaImpl.java
package com.code4devops.dao; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.code4devops.entity.Employee; @Repository public class EmployeeDAOJpaImpl implements EmployeeDAO { @Autowired private EntityManager entityManager; @Override public ListfindAll() { Query theQuery =entityManager.createQuery("from Employee"); List<Employee> employees = theQuery.getResultList(); return employees; } @Override public Employee findById(int theId) { Employee theEmployee = entityManager.find(Employee.class, theId); return theEmployee; } @Override public void save(Employee theEmployee) { Employee dbEmployee = entityManager.merge(theEmployee); theEmployee.setId(dbEmployee.getId()); } @Override public void deleteById(int theId) { Query theQuery = entityManager.createQuery("delete from Employee where id=:employeeId"); theQuery.setParameter("employeeId", theId); theQuery.executeUpdate(); } }
EmployeeService.java
package com.code4devops.service; import java.util.List; import com.code4devops.entity.Employee; public interface EmployeeService { public List<Employee> findAll(); public Employee findById(int theId); public void save(Employee theEmployee); public void deleteById(int theId); }
EmployeeServiceImpl.java
package com.code4devops.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.code4devops.dao.EmployeeDAO; import com.code4devops.entity.Employee; @Service public class EmployeeServiceImpl implements EmployeeService { @Autowired private EmployeeDAO employeeDAO; @Override @Transactional public List<Employee> findAll() { return employeeDAO.findAll(); } @Override @Transactional public Employee findById(int theId) { return employeeDAO.findById(theId); } @Override @Transactional public void save(Employee theEmployee) { employeeDAO.save(theEmployee); } @Override @Transactional public void deleteById(int theId) { employeeDAO.deleteById(theId); } }
EmployeeController.java
package com.code4devops.rest; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.code4devops.entity.Employee; import com.code4devops.service.EmployeeService; @RestController @RequestMapping("/api") public class EmployeeController { @Autowired private EmployeeService employeeService; @GetMapping("/employees") public List<Employee> findAll() { return employeeService.findAll(); } @GetMapping("/employee/{employeeId}") public Employee getEmployee(@PathVariable int employeeId) { Employee theEmployee = employeeService.findById(employeeId); if (theEmployee == null) throw new RuntimeException("Employee id not found - " + employeeId); return theEmployee; } @PostMapping("/employee") public Employee addEmployee(@RequestBody Employee theEmployee) { theEmployee.setId(0); employeeService.save(theEmployee); return theEmployee; } @PutMapping("/employee") public Employee updateEmployee(@RequestBody Employee theEmployee) { employeeService.save(theEmployee); return theEmployee; } @DeleteMapping("/employee/{employeeId}") public String deleteEmployee(@PathVariable int employeeId) { Employee tempEmployee = employeeService.findById(employeeId); if (tempEmployee == null) throw new RuntimeException("Employee id not found - " + employeeId); employeeService.deleteById(employeeId); return "Deleted employee id - " + employeeId; } }
Application.java
package com.code4devops; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
{ "firstName":"Ashutosh", "lastName":"Mishra", "email":"ashumishra9015@gmail.com", "mobile":"9560822035", "aadharNumber":"ASH123DDF5435SDFF" } { "id":12, "firstName":"Ashu", "lastName":"Mishra", "email":"ashumishra5@gmail.com", "mobile":"9560822032", "aadharNumber":"2ASH1DDF5435SDFF" }