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:1235/code4devops/api/employee | Create a new employee |
GET | localhost:1235/code4devops/api/employees | Read a list of employees |
GET | localhost:1235/code4devops/api/employee/{employeeId} | Read a single employee |
PUT | localhost:1235/code4devops/api/employee | Update an exiting employee |
DELETE | localhost:1235/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=1235
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 org.springframework.data.jpa.repository.JpaRepository; import com.code4devops.entity.Employee; public interface EmployeeRepository extends JpaRepository<Employee, Integer> { }
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 java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.code4devops.dao.EmployeeRepository; import com.code4devops.entity.Employee; @Service public class EmployeeServiceImpl implements EmployeeService { @Autowired private EmployeeRepository employeeRepository; @Override public List<Employee> findAll() { return employeeRepository.findAll(); } @Override public Employee findById(int theId) { Optional<Employee> result = employeeRepository.findById(theId); Employee theEmployee = null; if (result.isPresent()) theEmployee = result.get(); else throw new RuntimeException("Did not find employee id - " + theId); return theEmployee; } @Override public void save(Employee theEmployee) { employeeRepository.save(theEmployee); } @Override public void deleteById(int theId) { employeeRepository.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 ListfindAll() { 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" }